2016-02-08 2 views
1

У меня есть массив объектов, которые определены как {'preference name',value}. НапримерПреобразование массива объектов с ключами в массив с ключом

$preferences[] = {'abc',123}; 
$preferences[] = {'def',456}; 

Я хотел бы получить доступ к ним, как это:

$pref = $preferences['abc']; 

Конечно, я знаю, что я мог бы назначить их в качестве шпоночным массива, чтобы начать с, но я получаю значение через JSON и json_decode всегда создает массив объектов. Некоторые примеры JSON, что приводит нас к ситуации выше будут:

{'abc':123,'def':456} 

Очевидно, что это тривиально тайными их с помощью цикла, но я задавался вопрос, есть ли лучше один лайнер, который мог бы сделать эту работу?

+1

Decode как ассоциативный массив? http://php.net/manual/en/function.json-decode.php – AbraCadaver

+1

Я предполагаю некоторую комбинацию, такую ​​как [array_walk] (http://php.net/manual/en/function.array-walk. php) и [get_object_vars] (http://php.net/manual/en/function.get-object-vars.php) сделают трюк. –

+0

@AbraCadaver - это не совсем понятно, не так ли? Он просто расшифровал бы под-объекты как ассоциативные массивы, оставив ключи верхнего уровня в виде последовательного числового индекса? –

ответ

1

Если декодировать JSON в ассоциативные массивы и все свойства являются уникальными, а затем просто объединить вложенные массивы:

$preferences = json_decode($json, true); 
$preferences = call_user_func_array('array_merge', $preferences); 
+0

Спасибо @AbraCadaver Первая строка делает именно то, что я был после, я не уверен, почему вы использовали бы вторую линию? – Ben

+1

Я до сих пор не очень хорошо разбираюсь в ваших данных, но вторая строка была в ответ на _ «что не совсем получается, не так ли?» Это просто расшифрует под-объекты как ассоциативные массивы, оставив верх -level как последовательный числовой индекс? "_ – AbraCadaver

0

Кажется уродливым, но эй, он работает.

<?php 

$a = ['abc'=>123,'def'=>456]; 
$obj = json_decode(json_encode($a)); 
var_dump($obj->abc); //123 
$arr = (array)$obj; 
var_dump($arr["abc"]); //123 
Смежные вопросы