PHP如何取消多维数组成员的设置


PHP How to Unset Member of Multidimensional Array?

我有一个三维数组,看起来像这个

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)

我正在尝试循环遍历数组,并删除任何在[image]单元格中没有值的people(即数组的第二级)。

我试过

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

但是这并不能移除没有图像的阵列项目。循环是正确识别没有图像的员工,就好像我包含了一点代码来将他们回声到页面上一样,这很有效。它只是没有从$MyArray数组中取消设置它们。

有人能帮我做到这一点吗?

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

//您应该知道$group和$staff是临时变量

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

条件应该如下所示。

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

您可以为此使用array_filter:

带有闭包:可在php5.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");
 }