여러 어레이를 동시에 반복할 때, 문제는 부적절한 루프 구조로 인해 결과가 올바르지 않을 수 있다는 것입니다. 다음 예를 고려하십시오.
$data1 = ['a: 1', 'a: 2', 'a: 3', 'a: 4', 'a: 5']; $data2 = ['b: 1', 'b: 2', 'b: 3', 'b: 4', 'b: 5']; foreach ($data1 as $item1) { foreach ($data2 as $item2) { echo $item1 . '<br/>'; echo $item2 . '<br/>'; echo '<br/><br/>'; } }
위 코드는 중첩된 foreach 루프를 사용하여 다음과 같은 출력을 생성합니다.
a: 1 b: 1 a: 1 b: 2 a: 1 b: 3 a: 1 b: 4 a: 1 b: 5
그러나 예상되는 출력은 다음과 같습니다.
a: 1 b: 1 a: 2 b: 2 a: 3 b: 3 a: 4 b: 4 a: 5 b: 5
문제는 중첩 루프 구조로 인해 $data1의 각 요소가 $data2의 모든 요소와 함께 반복된다는 것입니다. 원하는 출력을 얻으려면 두 배열을 동시에 반복해야 합니다.
여러 배열을 동시에 반복하려면 다양한 방법을 사용할 수 있습니다.
array_map() 메서드(PHP >=5.3):
이 방법을 사용하면 여러 배열과 콜백 함수를 전달하여 해당 요소를 처리할 수 있습니다.
array_map(function($v1, $v2){ echo $v1 . '<br>'; echo $v2 . '<br>'; }, $data1, $data2);
MultipleIterator 메소드(PHP >=5.3):
이것은 메소드는 여러 배열을 동시에 반복하는 데 사용할 수 있는 여러 반복자 객체를 생성합니다.
$it = new MultipleIterator(); $it->attachIterator(new ArrayIterator($data1)); $it->attachIterator(new ArrayIterator($data2)); foreach ($it as $a) { echo $a[0] . '<br>'; echo $a[1] . '<br>'; }
for Loop with Counter(PHP >=4.3):
이 방법은 카운터 변수가 있는 for 루프를 사용하여 두 가지 모두를 반복합니다. arrays.
$keysOne = array_keys($data1); $keysTwo = array_keys($data2); $min = min(count($data1), count($data2)); for ($i = 0; $i < $min; $i++) { echo $data1[$keysOne[$i]] . '<br>'; echo $data2[$keysTwo[$i]] . '<br>'; }
array_combine() 메서드(PHP >=5.0):
이 메서드는 배열에 다음이 있는 경우 사용할 수 있습니다. 고유한 가치. $data1의 요소가 키이고 $data2의 요소가 값인 단일 배열로 배열을 결합합니다.
foreach (array_combine($data1, $data2) as $d1 => $d2) { echo $d1 . '<br>'; echo $d2 . '<br>'; }
call_user_func_array() 메서드( PHP >=5.6):
이 방법을 사용하면 여러 배열을 전달할 수 있습니다. 콜백 함수로.
$func = function (...$numbers) { foreach ($numbers as $v) echo $v . '<br>'; echo '<br>'; }; call_user_func_array("array_map", [$func, $data1, $data2]);
위 내용은 PHP에서 동시에 여러 배열을 효율적으로 반복하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!