2016-11-18 5 views
0

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

array (size=61) 
    0 => 
    object(Xxx\Car)[602] 
     private 'id' => int 53 
     private 'name' => string 'Volkswagen' (length=10) 
    1 => 
    object(Xxx\Car)[594] 
     private 'id' => int 43 
     private 'name' => string 'Toyota' (length=6) 
    2 => 
    object(Xxx\Car)[595] 
     private 'id' => int 32 
     private 'name' => string 'BMW' (length=3) 

Как я могу преобразовать массив таким образом, чтобы идентификатор стать ключом и значением описание, как это:

array (size=61) 
    53 => 'Volkswagen' 
    43 => 'Toyota' 
    32 => 'BMW' 

Я попытался

$cars = array();  
foreach ($result as $key => $value) { 
    $cars[$value['id']] = $value['name']; 
} 

Но это не работает.

+0

попробуйте сначала сохранить ключ и val в промежуточной переменной – Mox

ответ

5

Вы обрабатываете свои объекты так, как если бы они были массивами.

$array['key'] - это обозначение для доступа к элементу в массиве, но $object->key - это объект для объекта.

Попробуйте это:

$cars = array();  
foreach ($result as $key => $value) { 
    $cars[$value->id] = $value->name; 
} 

EDIT: Если это не работает (из-за private природы элементов), вы, возможно, придется объявить функции как getID() и getName() в файле класса объекта, и используйте их как таковые:

$cars = array();  
foreach ($result as $key => $value) { 
    $cars[$value->getID()] = $value->getName(); 
} 
0

Используйте функцию $arr = get_object_vars($obj);. Он преобразует объект в массив.

Смежные вопросы