2016-08-04 81 views
1

我不想在我的代碼中使用foreach循環,並從數組中取消設置數組元素,所以我嘗試了下面的代碼,但它不像預期的那樣工作。Array_filter從數組中取消設置值

<?php 
$arr = array(array('0'=>'test','1'=>'test1','images'=>'data'),array('0'=>'test','1'=>'test1','images'=>'data'),array('0'=>'test','1'=>'test1','images'=>'data'),array('0'=>'test','1'=>'test1','images'=>'data')); 
$arr1 = array_filter($arr,function ($item) use ($my_value) {  
    if(array_key_exists('images',$item)) {unset($item['images']);} 
    return $item;}); 
    echo "<pre>"; 
    print_r($arr1); 
    echo "</pre>"; 
    die; 

我想從數組中刪除鍵'圖像',但是這個代碼返回實際的數組。

此代碼中的錯誤是什麼?

回答

1

使用array_map()而不是使用array_filter

array_map()將映射你的陣列的每個值,並創建與執行新業務的新值的新陣列。

$arr1 = array_map(function($tmp) { unset($tmp['images']); return $tmp; }, $arr); 

這裏是一個Reference Linkarray_map()

1

您可以使用array_map(),而不是array_filter()

$arr1 = array_map(function($tmp) { unset($tmp['images']); return $tmp; }, $arr); 

print_r($arr1); 
0

爲此,您可以通過更新現有陣列不分配新陣列

您可以使用此:

array_walk($ararray_walk($arr, function(&$v, $k) { // Pass the values by reference 
    if(array_key_exists('images', $v)){ 
     unset($v['images']); 
    } 
}); 
print_r($arr); 

Demo