php - 是否有一种本地方法可以从多个对象获取属性值数组?

标签 php oop

我经常遇到这样的情况:我必须获取来自多个对象的值数组。让我用一个虚构的情况和一些代码来澄清这一点。

假设我创建了一个类...

class MyObject {
    public $x = 0;
    public $y = 0;
}

我有一个实例数组...

$instances = array(
    new Object,
    new Object,
    new Object
);

我想将所有 x 属性作为字符串连接,用逗号分隔...我必须使用循环...

$array = array();

foreach($instances as $instance) array_push($array, $instance->x);

$str = implode(',', $array); // holds an array of all x values

这完全可行,但我非常反对不必要的循环和专业的 native 实现,因为我对性能有点痴迷 - 我不喜欢循环遍历巨大的数组只是为了从每个实例中获取单个属性。

是否有一种从多个对象获取属性值数组的 native 方法?如果有,如何实现?如果没有,知道为什么不吗?

提前致谢。

最佳答案

一个简单的方法是使用array_map

class MyObject {
    public $x = 0;
    public $y = 0;
}

$instances = array(
        new MyObject,
        new MyObject,
        new MyObject
);


$str = implode(",",array_map(function($v){ return $v->x;},$instances));
echo $str ; 

array_reduce

$str = trim(array_reduce($instances, function($a,$b){ $a .= $b->x . "," ; return $a;}),",");
echo $str ;

两者都会输出

0,0,0

您还可以修改您的类以使用__toString()示例

class MyObject {
    public $x = 0;
    public $y = 0;
    function __toString() {
        return $this->x . "," . $this->y;
    }
}

$instances = array(new MyObject(),new MyObject(),new MyObject());
echo implode("\n", $instances);

输出

0,0
0,0
0,0

关于php - 是否有一种本地方法可以从多个对象获取属性值数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13743164/

相关文章:

php - 如何在Codeigniter框架中获取mysql函数的参数?

c++ - 如何公开常量数据

c# - C#中继承对象的内存分配

c++ - 处理访问 NULL 指针

php - 我刚刚写了一个糟糕的 PHP 函数,我需要一些帮助(elseif 链 - 开关?)

php - 类似于框架或固定下拉菜单的 css 页面内的滚动窗口

PHP SimpleXML - 多个同名的 child

javascript - 使用 jQuery 获取 2 个下拉菜单项的选定值

java - 处理数据库子类的最佳设计?

c++ - Qt 的简单版本检查器