3

I have a 2d Array (returned from PDO MySQL DB) that is of the form

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

Is there an elegant/efficient solution to transform it to

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

I know I could loop through and create the array that way, but i feel like that may be less efficient than something like a fancy array_map.

Basically I want something like...

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

1 Answer 1

11

If you are using PHP5.5 then you can use the array_column function - documentation

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

Otherwise, an array_map solution is probably as good as you can get:

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

Here's the array_combine docs

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.