2015-06-10 38 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; 
}