Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Arrays: Pop an array of single-element arrays into one array

Tags:

arrays

php

Using a proprietary framework, I am frequently finding myself in the situation where I get a resultset from the database in the following format:

array(5) {
  [0] => array(1) {
    ["id"] => int(241)
  }
  [1] => array(1) {
    ["id"] => int(2)
  }
  [2] => array(1) {
    ["id"] => int(81)
  }
  [3] => array(1) {
    ["id"] => int(560)
  }
  [4] => array(1) {
    ["id"] => int(10)
  }
}

I'd much rather have a single array of ids, such as:

array(5) {
  [0] => int(241)
  [1] => int(2)
  [2] => int(81)
  [3] => int(560)
  [4] => int(10)
}

To get there, I frequently find myself writing:

$justIds = array();
foreach( $allIds as $id ) {
  $justIds[] = $id["id"];
}

Is there a more efficient way to do this?

like image 783
Rob Drimmie Avatar asked May 31 '10 16:05

Rob Drimmie


2 Answers

$out = array_map('array_shift', $in);

e.g.

$in = array(
  array("id" => 241),
  array ("id" => 2),
  array ("id" => 81),
  array ("id" => 560),
  array ("id" => 10)
);
$out = array_map('array_shift', $in);
var_dump($out);

prints

array(5) {
  [0]=>
  int(241)
  [1]=>
  int(2)
  [2]=>
  int(81)
  [3]=>
  int(560)
  [4]=>
  int(10)
}
like image 174
VolkerK Avatar answered Oct 09 '22 07:10

VolkerK


With PHP 5.3 you can do

$justIds = array_map(
    function($cur) {
        return $cur['id'];
    },
    $allIds
);

With PHP < 5.3 you'd have define a regular function and then pass the name as string to array_map().

like image 41
johannes Avatar answered Oct 09 '22 09:10

johannes