2013-07-06 2 views
0

"values"라는 다차원 배열이 있습니다. 이것은 var_dump($values) 지금 보입니다. 여기 php 배열이 작동하지 않음

array(1) { 
    [0]=> array(3) { 
     ["content"]=> array(1) { 
      ["items"]=> array(4) { 
       [0]=> string(4) "3121" 
       [1]=> string(4) "3116" 
       [2]=> string(4) "3115" 
       [3]=> string(4) "3114" 
      } 
     } 
     ["options"]=> array(8) { 
      ["title"]=> string(7) "inherit" 
      ["size"]=> string(4) "tiny" 
      ["orderby"]=> string(4) "date" 
      ["order"]=> string(4) "desc" 
      ["filter"]=> string(8) "category" 
      ["pagination"]=> bool(false) 
      ["per_page"]=> int(12) 
      ["content"]=> array(3) { 
       [0]=> string(5) "title" 
       [1]=> string(7) "excerpt" 
       [2]=> string(4) "tags" 
      } 
     } 
     ["__version"]=> string(5) "2.3.1" 
    } 
} 

내가 값

//before unset 
    var_dump($values); 

    $ID = "3121"; 
    foreach ($values as $value) { 
        foreach($value['content']['items'] as $key => $val) {    
        if($val == $ID) { 
        unset($value['content']['items'][$key]); 
        } 
        } 
     } 

    //after unset 
    var_dump($values); 

내 위해서 var_dump도 해제 후 같은 모양을 설정 해제하기 위해 사용하고 코드입니다. 배열이 작동하지 않는 것 같아요. 누군가 내 코드에 무슨 문제가 있다고 말할 수 있습니까?

+0

$ 키 안녕 –

답변

6

참조를 사용할 필요가 for 루프에서 $key 변수를 넣지 않았고 값을 변경

foreach ($values as $value) { 

foreach ($values as &$value) { 

관련 documen에 대한 here를 참조하십시오 .

+0

우수 .. 그게 고정 것을 추가 한 후 같은 보인다. – Giri

+0

@Giri for 루프가 끝난 후에'unset ($ value)'를 사용하십시오. (이것은 REFERENCE, ** NOT ** 변수를 삭제할 것입니다.) 또는 코드 내에 쓸모없는 참조가 있습니다. 예를 들어'array.pop'를 사용하여 마지막 값을 지우면 다른 곳을 참조 할 때 메모리에 남아있게됩니다. – h2ooooooo

+0

@ h2ooooooo 귀하의 조언에 감사드립니다. 그게 정말 도움이. – Giri

3

당신은 당신이 참조 변화로 대신 값에 의해 전달되는 PHP는 배열에서

foreach ($values as &$value) { 
    foreach($value['content']['items'] as $key => $val) {    
     if($val == $ID) { 
      unset($value['content']['items'][$key]); 
     } 
    } 
} 
+0

설정되지 않습니다, 그것은 여전히도 주요 변수 – Giri

0

foreach ($values as &$value)