我知道这可能看起来像其他问题的重复,但我一直在测试其他问题的解决方案,我不能让它们在我的具体情况下工作。
我有一个名为$get_food
的"复杂"多维数组,它看起来像这样:
Array (
[0] => Array (
[0] => Array (
[dietID] => 562
[blockNum] => 1
)
[1] => Array (
[0] => Array (
[0] => Array (
[mealTitle] =>
)
[1] => Array (
[foodNumber] => 1
[portions] => 1
[foodID] =>
)
)
[1] => Array (
[0] => Array (
[mealTitle] =>
)
[1] => Array (
[foodNumber] => 1
[portions] => 1
[foodID] =>
)
)
)
)
)
Array (
[0] => Array (
[0] => Array (
[dietID] => 562
[blockNum] => 2
)
[1] => Array (
[0] => Array (
[0] => Array (
[mealTitle] => Carnitas
)
[1] => Array (
[foodNumber] => 1
[portions] => 1
[foodID] =>
)
)
[1] => Array (
[0] => Array (
[mealTitle] => Geometry
)
[1] => Array (
[foodNumber] => 1
[portions] => 1
[foodID] => 21
)
)
)
)
)
Array (
[0] => Array (
[0] => Array (
[dietID] => 562
[blockNum] => 3
)
[1] => Array (
[0] => Array (
[0] => Array (
[mealTitle] => Carburation
)
[1] => Array (
[foodNumber] => 1
[portions] => 1
[foodID] =>
)
[2] => Array (
[foodNumber] => 2
[portions] => 1
[foodID] =>
)
[3] => Array (
[foodNumber] => 3
[portions] => 1
[foodID] =>
)
[4] => Array (
[foodNumber] => 4
[portions] => 1
[foodID] =>
)
[5] => Array (
[foodNumber] => 5
[portions] => 1
[foodID] =>
)
)
[1] => Array (
[0] => Array (
[mealTitle] => Bar Rescue
)
[1] => Array (
[foodNumber] => 1
[portions] => 1
[foodID] =>
)
)
)
)
)
我需要迭代它并删除具有空[foodID]
的子数组。
。用键[5]
删除整个子数组,因为它有一个空的[foodID]
项,这样是无用的:
[5] => Array (
[foodNumber] => 5
[portions] => 1
[foodID] =>
)
一旦这些子数组被删除,我需要重建主数组,使其看起来与最初相同(具有相同的级别),但没有多余的子数组。
我设法在一个更简单的多维数组上做到这一点,但不是这次。我不能让它最后看起来一样。
这是混乱的代码后挫折,我现在只是输出无意义的:
foreach($get_food as $key => $meal):
foreach($meal as $key1 => $mealpart){
foreach($mealpart as $key2 => $food){
//print_r($food);
foreach($food as $key3 => $fooditem){
if(($key3 != 0)&&($get_food[$key][$key1][$key2][$key3]['foodID'] == '')){
unset($get_food[$key][$key1][$key2][$key3]);
//echo 'No Food ID';
} else {
$updatedFood[$key][$key1][$key2][$key3]= $fooditem;
}
}
}
} endforeach;
所以,任何帮助都是非常感谢的:)
////////编辑
主数组由8个数组组合而成。以下是它们的var_export
:
$get_food = array(
0 => array(
0 => array(
0 => array(
'dietID' => '562',
'blockNum' => '1',
) ,
1 => array(
0 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '33',
) ,
) ,
1 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '30',
) ,
) ,
2 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '34',
) ,
) ,
) ,
) ,
) ,
1 => array(
0 => array(
0 => array(
'dietID' => '562',
'blockNum' => '2',
) ,
1 => array(
0 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '',
) ,
) ,
) ,
) ,
) ,
2 => array(
0 => array(
0 => array(
'dietID' => '562',
'blockNum' => '3',
) ,
1 => array(
0 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '',
) ,
) ,
) ,
) ,
) ,
3 => array(
0 => array(
0 => array(
'dietID' => '562',
'blockNum' => '4',
) ,
1 => array(
0 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '',
) ,
) ,
) ,
) ,
) ,
4 => array(
0 => array(
0 => array(
'dietID' => '562',
'blockNum' => '5',
) ,
1 => array(
0 => array(
0 => array(
'mealTitle' => '',
) ,
1 => array(
'foodNumber' => '1',
'portions' => '1',
'foodID' => '',
) ,
) ,
) ,
) ,
) ,
5 => array(
0 => '',
) ,
6 => array(
0 => '',
) ,
7 => array(
0 => '',
) ,
);
/////EDIT 2
//////////////////解决方案 ////////////////////
感谢@Brian的帮助,他让我意识到我的目标是错误的键,我试图创建一个不必要的额外数组,我想出了这个问题的解决方案。
你可以在这里看到工作代码:http://codepad.org/6xgrpo46
希望这对将来的人有所帮助!:)
检查foodID是否为空时,您正在查看错误的值:
$get_food[$key][$key1][$key2][$key3]['foodID']
vs。
$get_food[$key][$key1][$key2][$key3][1]['foodID']
同样的问题似乎是为unset
在你的例子。
foreach($get_food as $key => $meal){
foreach($meal as $key1 => $mealpart){
foreach($mealpart as $key2 => $food){
foreach($food as $key3 => $fooditem){
if ($key3 == 0)
continue;
if (empty($get_food[$key][$key1][$key2][$key3][1]['foodID']))
unset($get_food[$key][$key1][$key2][$key3][1]);
}
}
}
}