PHP从一个更大更复杂的数组中移除包含空值的数组


PHP Remove Array Containing Empty Value within a Bigger, more complex Array

我知道这可能看起来像其他问题的重复,但我一直在测试其他问题的解决方案,我不能让它们在我的具体情况下工作。

我有一个名为$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]);
            }
        }
    }
}