1

私はこのような三次元配列を持っています

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に値がない人 (つまり、配列の 2 番目のレベル) を削除しようとしています。[image]

私はもう試した

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

ただし、これは画像のない配列アイテムを削除しません。ループは、画像のないスタッフをページにエコーするコードを少し含めているかのように正しく識別しています。これは機能します。$MyArray配列からそれらを設定解除していないだけです。

誰でもこれを達成するのを手伝ってもらえますか?

4

4 に答える 4

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

// $group と $staff が一時変数であることを知っておく必要があります

于 2013-07-26T14:06:39.130 に答える
1
foreach ($MyArray as $Key=>$group) {

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

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

    }

}
于 2013-07-26T14:07:03.787 に答える
0

条件は次のようになります。

foreach($MyArray as $Key=>&$group){            
    foreach($group as $staffkey=>$staff){
      if( $staff['image'] == null)) 
      {
        unset($MyArray[$key][$staffkey]);
      } 
    }
}
于 2013-07-26T14:10:02.720 に答える
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");
 }
于 2013-07-26T14:14:08.450 に答える