2011-04-12 3 views
10

저는 PHP를 처음 사용합니다. 나는 같은 크기의 두 배열 $array1$array2을 가지고있다.foreach를 사용하여 같은 크기의 두 루프를 반복 할 수 있습니까?

foreach($array1 as $element1) { 
     //Do stuff with $element1 
} 

foreach($array2 as $element2) { 
     //Do stuff with $element2 
} 

을하지만 지금 난에 액세스 할 수 있도록 같은 시간에 두 배열을 반복하고 싶습니다 : 나는과 같이 배열을 반복하는 foreach 루프를 사용하고 루프 본문에 $element1$element2이 있습니다.

어떻게하면됩니까? 대신 루프

+3

첫 번째 배열의 * 키 *는 두 번째 배열의 * 키 *와 동일합니까? 이 세부 사항이 답을 결정합니다. – Charles

+0

@Charles 나는 이렇게 믿을 만하다. – Adam

+0

우수. – Charles

답변

10
while (($element1 = next($array1)) !== false) { 
    $element2 = next($array2); 
    // Do something 
} 

그러나 false$array1에서 허용 값이 경우는 실패합니다. false (이 경우)는 $array2에서 허용하지 않는 경우, 당신은 단지 두

A "foreach는"-solution (모두 공유하는 경우 동일한 키)

foreach ($array1 as $i => $element1) { 
    $element2 = $array2[$i]; 
    // Do something 
} 

세 번째 (나는 아주 좋은 생각 교체 할 수 있습니다 다만 $array1

foreach (array_combine(array_values($array1), array_values($array2)) as $element1 => $element2) { 
    // Do something 
} 
+0

첫 번째 배열에'false'가 없으면'next' 트릭이 작동합니다. – Charles

+0

네, 저도 압니다 만, 저는 그렇게하지 못했습니다. 그러나, 나는 두 가지 다른 방법을 추가하고 적어도 하나는 적합해야합니다. 세 번째 것은 나에게 아주 좋은 느낌이 들지만, 그것 역시 한계가 있습니다. – KingCrunch

1

사용 A를 ... 두 배열

+0

수치 배열에서만 작동합니다. –

+0

이것은 ** foreach ** loop ... 질문이 아닙니다. 'foreach를 사용하여 같은 크기의 두 루프를 반복 할 수 있습니까?'하지만 num, num으로 작동합니다. – Wh1T3h4Ck5

+1

@ Wh1T3h4Ck5, 반복 할 수있는 더 많은 방법이 있습니다. PHP에서 배열보다 고양이를 스킨 있습니다. 그들 모두는 주어진 환경에서 적절할 수 있습니다. – Charles

0

무엇

$i = 0; 
foreach($array1 as $element) { 

    // Do stuff with the element 
    $stuff_from_this_array = $element; 
    $stuff_from_other_array = $array2[$i]; 
    $i++; 

} 

약에 대한

for($i = 0;$i<count($array1);$i++) { 
    /* access $array1[$i] and $array2[$i] here */ 
} 
배열의 인덱스가 숫자하면이 작동합니다

같은 당신 분명히 $ stuff_this_array와 $ stuff_from_other_array를 좀 더 끈기있게 꾸밀길 원하지만 아마도 이것은 당신에게 아이디어를 줄 것입니다.

+0

배열에 숫자, 순차 키가없는 경우이 값이 나옵니다. – Charles

2

Each 프리미티브을 가능하게 해주는) 용액, 키와 값을 포함하는 배열을 반환하고, 다음의 요소 포인터를 진행한다. 마지막 요소를 지나쳐 진 후에는 false를 반환합니다.

// Iterate until one of the arrays is complete 
while (($a = each($array_a)) !== false && ($b = each($array_b)) !== false) { 
    echo "The key:value from array_a is {$a['key']}:{$a['value']}.\n"; 
    echo "The key:value from array_b is {$b['key']}:{$b['value']}.\n"; 
} 

두 배열을 통해 완전히 반복하려면 사용 || & & 대신.

+0

... 나는 내가 할 수 있다는 것을 알지도 못했다! 놀랄 만한!!! –

0

가능한 해결 방법입니다. next()로 직접 시작하면 배열의 첫 번째 요소를 얻지 못합니다.

reset($array1); reset($array2); 
for ($element1 = current($array1), $element2 = current($array2); 
     $element1 !== false && $element2 !== false; 
     $element1 = next($array1), $element2 = next($array2)) { 
    // Do something 

} 
관련 문제