我有像这样的数组多维代码:
$array = [
'fruits' => ['apple','orange','grape', 'pineaple'],
'vegetables' => ['tomato', 'potato']
];
$eaten = 'grape';
unset($array[$eaten]);
我需要的是从阵列中删除'葡萄',因为'葡萄'已经被吃掉了。如何修复我的代码以取消'葡萄'?
和我的问题二,如果可以取消设置,有没有办法取消设置多值,如
unset($array,['grape','orange']);
感谢您的帮助..
答案 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);