>  기사  >  백엔드 개발  >  PHP 생성기를 사용하여 배열 교차 및 합집합을 생성하는 독특한 방법

PHP 생성기를 사용하여 배열 교차 및 합집합을 생성하는 독특한 방법

王林
王林원래의
2024-05-02 11:39:01948검색

생성기를 사용하여 배열 교집합과 합집합을 생성하는 단계는 다음과 같습니다. 생성기 함수를 정의하고, 항복을 사용하여 값을 반환하고, 현재 상태를 기억합니다. array_intersect() 함수를 사용하여 교차점의 요소를 포함하는 새 배열을 반환하는 배열 교차점을 생성하는 생성기입니다. 마찬가지로, array_merge() 함수를 사용하여 두 배열의 모든 요소를 ​​포함하는 새 배열을 반환하는 배열 합집합용 생성기를 만듭니다. 생성기 변수를 사용하여 교차점이나 합집합을 반복하여 각 요소를 가져옵니다.

PHP 생성기를 사용하여 배열 교차 및 합집합을 생성하는 독특한 방법

PHP 생성기를 사용하여 배열 교집합과 합집합을 생성하는 독특한 방법

PHP에서 생성기는 시퀀스 데이터를 생성하는 데 사용되는 특수 함수입니다. 대규모 데이터 세트를 탐색해야 하거나 결과를 느리게 계산해야 하는 상황에 사용하기에 이상적입니다. 이 기사에서는 생성기를 사용하여 배열 교차점과 합집합을 생성하는 독특한 방법을 보여줍니다.

Generator 구문

Generator 함수는 yield 키워드를 사용하여 PHP에서 정의됩니다. 이 키워드를 사용하면 함수가 실행을 중단하지 않고 값을 반환하고 현재 상태를 기억할 수 있습니다. yield 关键字定义。该关键字允许函数在不中断执行的情况下返回一个值并记住其当前状态。

function myGenerator() {
    yield 1;
    yield 2;
    yield 3;
}

数组交集生成器

要创建数组交集的生成器,可以使用 array_intersect() 函数,该函数返回一个包含交集中元素的新数组。生成器版本如下:

function intersectGenerator(array $arr1, array $arr2): Generator {
    foreach ($arr1 as $k => $v) {
        if (in_array($v, $arr2, true)) {
            yield $v;
        }
    }
}

数组并集生成器

类似地,可以使用 array_merge()

function mergeGenerator(array $arr1, array $arr2): Generator {
    foreach ($arr1 as $v) {
        yield $v;
    }
    foreach ($arr2 as $v) {
        if (!in_array($v, $arr1, true)) {
            yield $v;
        }
    }
}

배열 교차점 생성기

배열 교차점 생성기를 생성하려면 교차점의 요소가 포함된 새 배열을 반환하는 array_intersect() 함수를 사용할 수 있습니다. 생성기 버전은 다음과 같습니다:

$arr1 = [1, 2, 3, 4, 5];
$arr2 = [3, 4, 5, 6, 7];

$intersection = intersectGenerator($arr1, $arr2);
$union = mergeGenerator($arr1, $arr2);

foreach ($intersection as $value) {
    echo $value . " ";
}
echo "\n";

foreach ($union as $value) {
    echo $value . " ";
}

Array Union Generator

🎜🎜마찬가지로 array_merge() 함수를 사용하여 배열 Union 생성기를 생성할 수 있습니다. 이 함수는 두 배열의 모든 요소(중복 요소 포함)를 포함하는 새 배열을 반환합니다. 생성기 버전은 다음과 같습니다. 🎜
3 4 5
1 2 3 4 5 6 7
🎜🎜 실제 예 🎜🎜🎜다음 예를 고려하세요. 🎜rrreee🎜이 결과는 다음과 같습니다. 🎜rrreee

위 내용은 PHP 생성기를 사용하여 배열 교차 및 합집합을 생성하는 독특한 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.