2015-06-10 40 views
0

删除元素我有数组:从多维数组的索引值,通过使用PHP

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; 

哪里是我的错? 谢谢!

+1

你的函数是'一个StdClass Objects'和你正在传递'array'。为什么? – Viral

+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)); 
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; 
}