我有一个三维数组,看起来像这个
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");
}