从多维数组中提取id

时间:2013-08-22 21:37:49

标签: php arrays multidimensional-array

我有一个db记录数组,我想从中转换:

array(2) {
  [0]=>
  array(1) {
    ["ID"]=>
    string(1) "2"
  }
  [1]=>
  array(1) {
    ["ID"]=>
    string(1) "3"
  }
}

对此:

array(2) {
  [0]=>
    string(1) "2"
  [1]=>
    string(1) "3"
}

我正在寻找性能最快/最简单的解决方案。

我找不到任何PHP函数。

5 个答案:

答案 0 :(得分:4)

在PHP 5.5或更高版本中,最简单的解决方案是使用PHP内置的array_column()函数。

$ids = array_column($arr, 'ID');

答案 1 :(得分:3)

$bas = array();
foreach ($foo as $bar) {
    $bas[] = $bar['ID'];
}

print_r($bas);

$foo将是原始数组,$bas是您要将其转换为。{/ p>

答案 2 :(得分:3)

我写了一个简单的测试来找到这些之间的最佳解决方案:

// foreach
foreach ($array as $element) { $result[] = $element['ID']; }
// array_map
array_map(function($element) { return $element['ID']; }, $array);
// array_push
foreach ($array as $element) { array_push($result, $element['ID']); }

<强>结果:

Test name   Repeats         Result          Performance    
foreach     1000            0,009204 sec    +0% 
array_push  1000            0,015731 sec    -70,915%
array_map   1000            0,024891 sec    -170,437%

它们不时会略有不同,但foreach始终是最佳的,效果出色。所以,似乎@campari答案必须是最好的答案。但我没有测试@kba解决方案,因为我使用的是PHP 5.4。我怀疑array_column算法会显示出更好的结果。

在此测试代码:link

答案 3 :(得分:2)

输入数据(其他数据类型丰富,用于测试)并假设您使用的是最新的PHP版本:

$input = array(
    0=>
    array(
        "ID"=>  "2"
    ),
    1=>
    array(
        "ID"=>  "3"
    ),
    "iamnotanarray", 100, null
);

示范:

$out = array_map( function($el){ return @current($el);}, $input);

<强>通常

$out = array_combine(
    array_keys($ret)
    ,array_map( function($el){ return @current($el);}, $ret)
)

<强>输出:

var_export($out);

array (
    0 => '2',
    1 => '3',
    2 => NULL,
    3 => NULL,
    4 => NULL,
)

var_dump($out);

array(5) {
  [0]=>
  string(1) "2"
  [1]=>
  string(1) "3"
  [2]=>
  NULL
  [3]=>
  NULL
  [4]=>
  NULL
}

要过滤可能不需要的数据类型,您可以使用:

$out = array_filter($out, is_string);
var_dump($out);
array(2) {
  [0]=>
  string(1) "2"
  [1]=>
  string(1) "3"
}

我没有计时(),但这是使用 PHP的原生预编译函数。速度因PHP可执行文件的gcc编译器优化而异。

注意: @current很脏,不推荐使用,仅用于简洁/可读性。它会产生与is_array($el) ? current($el) : NULL;

相同的效果

答案 4 :(得分:1)

试试这个 -

$newArr = array();
foreach($array as $a)  // $array is original array 
{
    array_push($newArr, $a["ID"]);
}
print_r($newArr);