如何从数组中的每个对象获取对象属性?

Dis*_*oat 11 php

假设我在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
        )
)
Run Code Online (Sandbox Code Playgroud)

获取ID数组的最佳方法(即最快)是什么?即array(1,2,7)我可以手动循环,但我觉得必须有一个更好的方法.

刚刚在类似的问题中看到了这一点,但是对于接受的答案是否真的是最好的方式还有一些争论,加上它是从2年前开始的.我在PHP 5.3上.

Roc*_*mat 8

您可以使用array_map从每个元素获取ID.

function getID($a){
   return $a->id;
}
$IDs = array_map('getID', $array);
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/nf3ug


Kar*_*ger 5

从PHP 7.0开始,您可以array_column为此使用内置函数,该函数采用输入数组和要提取的属性的名称:

$ids = array_column($input, 'id');
// array(0 => 1, 1 => 2, 2 => 7)
Run Code Online (Sandbox Code Playgroud)

作为第三个参数,您还可以选择提供一个索引键:

$ids = array_column($input, 'name', 'id');
// array(1 => 'Title One', 2 => 'Title Two', 7 => 'Title Seven')
Run Code Online (Sandbox Code Playgroud)

请注意,尽管PHP 5.5.0已经提供了该功能,但PHP 7.0首次引入了对对象数组的支持。


web*_*ave 3

最快的方法就是简单地循环 ( foreach, for, while)。使用回调函数会产生不必要的开销。

我想看看是否有一种方法可以通过构建初始对象数组的代码来创建列表。