我有阵列:
Array
(
[5] => Array
(
[0] => 19
[1] => 18
)
[6] => Array
(
[0] => 28
)
)
我尝试使用我的函数删除元素:
function removeElementWithValue($obj, $delete_value){
if (!empty($obj->field)) {
foreach($obj->field as $key =>$value){
if (!empty($value)) {
foreach($value as $k=>$v){
if($v == $delete_value){
$obj->field[$key][$k] = '';
}
}
}
}
}
return urldecode(http_build_query($obj->field));
}
echo removeElementWithValue($request, '19');
在上面的操作之后,我有: 5 [0] =& 5 [1] = 18& 6 [0] = 28; //正确!!!
echo removeElementWithValue($request, '18');
上面的操作后我有: 5 [0] =& 5 [1] =& 6 [0] = 28; //错误???
但是我在第二次操作后的预期结果是:
5[0]=19&5[1]=&6[0]=28;
我的错误在哪里? 谢谢!
答案 0 :(得分:1)
使用array_walk_recursive查找和更改值
$arr = Array (
5 => Array ( 0 => 19, 1 => 18 ),
6 => Array ( 0 => 28));
$value = 18;
array_walk_recursive($arr,
function (&$item, $key, $v) { if ($item == $v) $item = ''; }, $value);
print_r($arr);
结果:
Array (
5 => Array ( 0 => 19, 1 => ),
6 => Array ( 0 => 28));
答案 1 :(得分:0)
更简单的功能可能是..
function removeElementWithValue($ar,$val){
foreach($ar as $k=>$array){
//update the original value with a new array
$new_ar = array_diff_key($array,array_flip(array_keys($array,$val)));
if($new_ar){
$ar[$k]=$new_ar;
}else{
unset($ar[$k]);//or remove the empty value
}
}
return $ar;
}