我有一个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函数。
答案 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);