array_map 2d массив в 1d ассоциативный массив

У меня есть 2d-массив (возвращенный из PDO MySQL DB), который имеет вид

{
  [0] => {
    "ID" => 1,
    "Name" => "Name1"
  },
  [1] => {
    "ID" => 2,
    "Name" => "Name2"
  },
 [2] => {
    "ID" => 3,
    "Name" => "Name3"
  }
}

Есть ли элегантное/эффективное решение для преобразования его в

{
  [1] => "Name1",
  [2] => "Name2",
  [3] => "Name3"
}

Я знаю, что мог бы прокрутить и создать массив таким образом, но мне кажется, что это может быть менее эффективно, чем что-то вроде причудливого array_map.

В общем, я хочу что-то вроде...

array_map(
  function ($value) { 
    return $value['ID']=>$value['Name']; 
  }, $ResultArray);

person Cheruvian    schedule 14.08.2014    source источник


Ответы (1)


Если вы используете PHP5.5, вы можете использовать функцию array_column - документация

$names = array_column($records, 'Name', 'ID');

В противном случае решение array_map, вероятно, будет настолько хорошим, насколько это возможно:

$names = array_combine(array_map(function($value) {
     return $value['ID'];
}, $records), array_map(function($value) {
     return $value['Name'];
}, $records));

Вот документы array_combine

person Scopey    schedule 14.08.2014