2

В PHP есть какие-либо встроенные функции для включенияВ PHP, фильтровать массив ассоциативных массивов

[{"id":1, "name":"John"}, {"id":2, "name":"Tim"}] 

в

[{"id":1}, {"id":2}] 

?

Я использовал JSON для описания объектов выше, но это всего лишь концептуальное представление моего массива ассоциативных массивов. Я не хочу, чтобы ручка была вручную - что-то короткое и элегантное, я могу поместиться на одной линии, было бы хорошо.

+0

'array_multisort()', но это сложно. – Ben

+0

@Steve вы можете показать пример? – Trindaz

ответ

4

Одна линия, используя array_map:.

$arr = json_decode('[{"id":1, "name":"John"}, {"id":2, "name":"Tim"}]'); 

$new_arr = array_map(function($el){$ret=array("id"=>$el->id);return $ret;},$arr); 

var_dump(json_encode($new_arr)); 
+2

Быстрая заметка для любых других новичков PHP: это решение отлично подходит для декодированного json * object *, но при реализации его для массива * ассоциативных массивов * обязательно замените ссылку $ el-> id на $ el [' Я бы']. – Trindaz

0

Первый декодированный json от json_decode. Вы получите массив. Затем выполните следующие действия: link, чтобы удалить индекс из ассоциативного массива. Затем снова расшифруйте его. Он должен работать.

1
array_map(function($arr){return $arr[0];}, $array); 

Это должно быть сделано.

Редактировать Как отметил Джонатан Хиббард, вы можете передать элемент массива по ссылке, таким образом вы не сможете назначить результат функции и просто использовать измененный старый массив. Затем код должен быть соответствующим образом изменен.

0

сделать что-то вроде:

$array = json_decode($some_json_string, true); 
array_walk($array, function($value, $key) use(&$array) { 
    if($key == "name") { 
    unset($array[$key]); 
    } 
}); 

Edit: ответ Cthulhu не получит Я. там без переназначения его. Можно использовать его как ссылку хотя бы (равную прогулке, хотя, если вы хотите использовать карту, ее немного лучше не перераспределять с помощью новой копии массива и просто передавать ее по ссылке, а затем удалять ключ с неустановленным внутри это и двигаться дальше)

array_map(function(&$array) { unset($array['name']; }, $array); 
Смежные вопросы