PHP删除多维数组值

时间:2016-02-24 07:35:46

标签: php arrays multidimensional-array

我有像这样的数组多维代码:

$array = [
    'fruits' => ['apple','orange','grape', 'pineaple'],
    'vegetables' => ['tomato', 'potato']
];
$eaten = 'grape';
unset($array[$eaten]);

我需要的是从阵列中删除'葡萄',因为'葡萄'已经被吃掉了。如何修复我的代码以取消'葡萄'?

和我的问题二,如果可以取消设置,有没有办法取消设置多值,如

unset($array,['grape','orange']);

感谢您的帮助..

3 个答案:

答案 0 :(得分:2)

您可以按照以下方式删除eaten元素。使用array_search(),您可以在key元素的位置找到eaten

下面的代码显示,在任何多维数组中,您都可以调用给定的函数。

$array = [
    'fruits' => ['apple','orange','grape', 'pineaple'],
    'vegetables' => ['tomato', 'potato']
   ];
$eaten = 'grape';
$array = removeElement($array, $eaten);


function removeElement($data_arr, $eaten)
{
    foreach($data_arr as $k => $single)
    {
        if (count($single) != count($single, COUNT_RECURSIVE)) 
        {
           $data_arr[$k] = removeElement($single, $eaten);
        }
        else
        {
            if(($key = array_search($eaten, $single)) !== false)
            {
               unset($data_arr[$k][$key]);
            }
        }
    }
    return $data_arr;
}

P.S。请注意,您可以在一次通话中unset()多个元素。但是你使用unset的方式是错误的。

答案 1 :(得分:1)

我没有使用unset()建议您在删除所需的价值优势后创建新数组,原始数组将保持不变,您可以进一步使用它:

示例:

// your array
$yourArr = array(
                'fruits'=>array('apple','orange','grape', 'pineaple'),
                'vegetables'=>array('tomato', 'potato')
                );
// remove array that you need
$removeArr = array('grape','tomato');

$newArr = array();
foreach ($yourArr as $key => $value) {
    foreach ($value as $finalVal) {
        if(!in_array($finalVal, $removeArr)){ // check if available in removal array
            $newArr[$key][] = $finalVal;
        }       
    }   
}

echo "<pre>";
print_r($newArr);

<强>结果:

Array
(
    [fruits] => Array
        (
            [0] => apple
            [1] => orange
            [2] => pineaple
        )

    [vegetables] => Array
        (
            [0] => potato
        )

)

<强>解释

使用此数组array('grape','tomato');将删除您在此数组中定义的值。

答案 2 :(得分:0)

我就是这样做的。

$array = [
    'fruits' => ['apple','orange','grape', 'pineaple'],
    'vegetables' => ['tomato', 'potato']
];

$unset_item = 'grape';

$array = array_map(function($items) use ($unset_item) {
    $found = array_search($unset_item, $items); 
        if($found){
            unset($items[$found]);
        }       
    return $items;
}, $array);