2013-07-26 2 views
1

나는이PHP 다차원 배열 멤버를 해제하는 방법?

Array(
[Group 1] => Array 
    (
     [0] => Array 
      (
       [category] => Group1 
       [firstname] => John 
       [lastname] => Johns 
       [image] => /mysite.etc/jj.jpg 
      ) 
     [1] => Array 
      (
       [category] => Group1 
       [firstname] => John 
       [lastname] => James 
       [image] => /mysite.etc/jj2.jpg 
      ) 
    ) 
[Group 2] => Array 
    (
     [0] => Array 
      (
       [category] => Group2 
       [firstname] => John 
       [lastname] => Jackson 
       [image] => NULL 
      ) 
     [1] => Array 
      (
       [category] => Group2 
       [firstname] => John 
       [lastname] => Jimson 
       [image] => /mysite.etc/jj4.jpg 
      ) 
    )...etc) 

나는 배열을 통해 루프를 시도하고 제거하는 것 같은 보이는 세 가지 차원 배열을 가지고있는 people (즉, 배열의 두 번째 수준)이 [image]에 값이없는 세포.

나는

foreach($MyArray as $Key=>&$group){ 
    foreach($group as &$staff){ 
     if(!file_exists($staff['image'])){ 
      unset($staff); 
     } 
    } 
} 

을 시도했지만이 이미지 없음 배열 항목을 제거하지 않습니다. 루프는 이미지가없는 스태프를 페이지에 반향시키기위한 약간의 코드가 포함 된 것처럼 정확하게 식별합니다. $MyArray 어레이에서 설정을 해제하지 않는 것입니다.

누구든지 나를 이룰 수 있습니까? 당신이 (가) $ 그룹과 $ 직원을 알아야한다 //

답변

5
foreach($MyArray as $Key=>$group){ 
    foreach($group as $k=>$staff){ 
     if(!file_exists($staff['image'])) { 
      unset($MyArray[$Key][$k]); 
      } 
    } 
} 

는 조건은 다음과 같이 다음해야 임시 변수

1
foreach ($MyArray as $Key=>$group) { 

    foreach ($group as $k=>$staff) { 

     if(empty($staff['image']) || !file_exists($staff['image'])) { 
       unset($MyArray[$key][$k]); 
     } 

    } 

} 
+0

$ 직원이 임시 변수입니다. 이 코드는 OP가하려고하는 원래 배열에는 영향을 미치지 않습니다. 아래 Jason Yang의 대답을보십시오. – Maximus2012

+0

당신 말이 맞습니다. 내 대답을 업데이트합니다. – Aris

+0

Maximus2012 - 변수를 & $ staff (앰퍼샌드 포함)로 정의하지 않으면 임시 복사본이 아니라 원래 객체에 대한 참조로 설정됩니까? – Ambulare

0

입니다.

foreach($MyArray as $Key=>&$group){    
    foreach($group as $staffkey=>$staff){ 
     if($staff['image'] == null)) 
     { 
     unset($MyArray[$key][$staffkey]); 
     } 
    } 
} 
0

이에 대한 array_filter 사용할 수 있습니다

를 폐쇄와 함께 : 사용할 수 PHP 5.3

foreach($groups as &$users){ 
    $users = array_filter($users, function ($a) { return isset($a["image"]) && file_exists($a["image"]); }); 
} 

에 폐쇄하지 않고

function hasImage($a){ return isset($a["image"]) && file_exists($a["image"]); } 
foreach($groups as &$users){ 
    $users = array_filter($users, "hasImage"); 
}