2012-02-28 5 views
1

루프 중에 foreach() 루프의 다음 요소를 수정하려면 어떻게해야합니까? 변수와 참조로 이야기하는 것과 관련이 있다고 생각하지만 어떻게해야할지 모르겠습니다. 예 : ...foreach() 루프 중에 배열의 다음 요소 수정

내가 원하는
$arr = array(array('color' => 'red', 'type' => 'apple'), 
       array('color' => 'yellow', 'type' => 'banana'), 
       array('color' => 'purple', 'type' => 'grape') 
      ); 

foreach($arr as $k => $v) { 
    echo "<br> The ".$v['type'].' fruit is '.$v['color']; 

    // change the color of the next fruit? 
    if($v['type'] == 'apple') { $arr[$k+1]['color'] = 'green'; } 
} 

이 바나나가 녹색 나에게 말해,하지만 바나나에 그것을 고집 스틱 노란색 인

(UPDATE : 내 원래의 질문에 바보 같은 논리 오류를 수정 아래에 표시된 대답은 정확합니다.

답변

5

foreach는 참조가 아닌 배열의 복사본을 취하여 배열을 반복합니다. 배열 값을 앰퍼샌드 &을 사용하여 참조로 배열을 반복해야합니다. 내가 전화로 회신하고 같이

foreach($arr as $k => &$v) { 
    echo "<br> The ".$v['type'].' fruit is '.$v['color']; 

    // change the color of the next fruit? 
    if($v['type'] == 'banana') { $arr[$k+1]['color'] = 'green'; } 
} 
+1

을 유지하는 ... 모든 남았습니다입니다 그럼에도 불구하고 매우 중요한 것). '$ v [ 'type'] == 'banana''가 참일 때, 수정 된 다음 과일은 포도입니다. 바나나가 녹색이면 '$'[ 'type'] == 'apple' '이어야합니다. –

+1

내가 원래의 포스터가 포도의 색을 녹색으로 바꿀 것을 의미하는 다음 요소를 언급 할 때 나는 잘못 생각했다. – ncremins

+2

음, 잘 모르겠습니다. 참조를 사용하면 프로그래밍 오류가 해결됩니다. 그러나 그는 또한 바나나가 초록색 *이라고 말해주기를 원한다. 그 경우 그는 또한 논리 오류가있다. 그러나 당신의 대답은 그를 올바른 길로 인도해야합니다. –

0
$k=array_keys($yourarray); 
    for($i=0; $i<sizeof ($k); $i++) { 
     if($yourarray[$k[$i]] == "something") { 
      $yourarray[$k[$i+1]] = "something else"; 
     } 
    } 
}  

죄송 서식

-1

카운터 (솔루션의 한 부분 같은

$arr = array(array('color' => 'red', 'type' => 'apple'), 
      array('color' => 'yellow', 'type' => 'banana'), 
      array('color' => 'purple', 'type' => 'grape') 
     ); 

foreach($arr as $k => $v) { 
    echo "<br> The ".$v['type'].' fruit is '.$v['color']; 

    // change the color of the next fruit? 
    if($v['type'] == 'banana') { $arr[$k]['color'] = 'green'; } 

    // now echo the new color from the original array 
    echo "<br> The ".$arr[$k]['type'].' fruit is now '.$arr[$k]['color']; 
}