假设我在PHP中有一个对象数组,例如:
Array (
[0] => stdClass Object (
[id] => 1
[name] => Title One
)
[1] => stdClass Object (
[id] => 2
[name] => Title Two
)
[2] => stdClass Object (
[id] => 7
[name] => Title Seven
)
)
获取ID数组的最佳方式(即最快)是什么?即array(1,2,7)
我可以手动循环,但我觉得必须有更好的方法。
刚刚看到this in the similar questions,但是对于接受的答案是否真的是最好的方式还有一些争论,再加上它来自2年前。我在PHP 5.3上。
答案 0 :(得分:8)
您可以使用array_map
从每个元素中获取ID。
function getID($a){
return $a->id;
}
$IDs = array_map('getID', $array);
答案 1 :(得分:4)
从PHP 7.0开始,你可以使用内置函数array_column
,它接受一个输入数组和你要采摘的属性的名称:
$ids = array_column($input, 'id');
// array(0 => 1, 1 => 2, 2 => 7)
作为第三个参数,您也可以选择提供索引键:
$ids = array_column($input, 'name', 'id');
// array(1 => 'Title One', 2 => 'Title Two', 7 => 'Title Seven')
请注意,虽然它已经在PHP 5.5.0中提供,但PHP 7.0中首次引入了对对象数组的支持。
答案 2 :(得分:3)
最快的方法就是循环播放(foreach
,for
,while
)。使用回调函数会产生不必要的开销。
我想看看是否有办法通过构建初始对象数组的代码创建列表。
答案 3 :(得分:1)
您可以使用ouzo goodies
轻松完成$result = array_map(Functions::extract()->id, $objects);
或与阵列(来自ouzo goodies)
$result = Arrays::map($objects, Functions::extract()->id);
退房:http://ouzo.readthedocs.org/en/latest/utils/functions.html#extract
另请参阅使用ouzo进行函数式编程(我无法发布链接)。
答案 4 :(得分:0)
您是否尝试过array_keys功能?
修改强>
<?php
$ids = array();
for($c=0; $c<count($the_array); $c++) $ids[$c] = $the_array[$c]->id;
?>
答案 5 :(得分:0)
您还可以使用extract_property(),这是一个专门为此工作设计的经过良好测试的库(免责声明:我是作者)。
答案 6 :(得分:0)
我正在使用RedBean,由于某些原因,传入“getID”对我来说不起作用,所以这就是我如何做到的:
$ids = array_map(function($val){return $val->id;}, $objects);