2013-07-26 36 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"); 
}