Php 是否有从多个对象获取属性值数组的本机方法?
我经常遇到这样一种情况:我必须从多个对象获取一个值数组。让我用一个虚构的场景和一些代码来澄清这一点 假设我创建了一个类Php 是否有从多个对象获取属性值数组的本机方法?,php,oop,Php,Oop,我经常遇到这样一种情况:我必须从多个对象获取一个值数组。让我用一个虚构的场景和一些代码来澄清这一点 假设我创建了一个类 class MyObject { public $x = 0; public $y = 0; } 我有一个实例数组 $instances = array( new Object, new Object, new Object ); 我想把所有的x属性作为字符串连接起来,用逗号分隔。。。我将不得不使用一个循环 $array = arra
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
这完全可行,但我非常反对不必要的循环和亲本机的实现,因为我对性能有点痴迷——我不喜欢在巨大的数组中循环,只为了从每个实例中获得一个属性
是否有从多个对象获取属性值数组的本机方法?如果有,如何获取?如果没有,你知道为什么没有吗
提前感谢。我发现解决此问题的最简单方法是使用
数组\u map()
,如下所示:
implode(',', array_map(
function ($object) { return $object->property; },
$instances));
我找到的解决此问题的最简单方法是使用
array\u map()
,如下所示:
implode(',', array_map(
function ($object) { return $object->property; },
$instances));
一个简单的方法是使用
array\u 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\u reduce
$str = trim(array_reduce($instances, function($a,$b){ $a .= $b->x . "," ; return $a;}),",");
echo $str ;
两者都会输出
0,0,0
您还可以修改类以使用\uuu 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
一个简单的方法是使用
array\u 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\u reduce
$str = trim(array_reduce($instances, function($a,$b){ $a .= $b->x . "," ; return $a;}),",");
echo $str ;
两者都会输出
0,0,0
您还可以修改类以使用\uuu 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
OP希望避免循环<代码>数组\映射将在数组上进行内部迭代。顺便说一句,在给定的情况下,我看不到任何避免迭代的方法。@PLB几乎所有的东西都是循环的。。甚至时间在内部也是一个循环。。事实上,您正在处理多个无法避免的实例,loopOP希望避免循环<代码>数组\映射将在数组上进行内部迭代。顺便说一句,在给定的情况下,我看不到任何避免迭代的方法。@PLB几乎所有的东西都是循环的。。甚至时间在内部也是一个循环。。事实上,你正在处理多个实例,你无法避免循环!PHP的功能让我惊讶不已,我不知道它们的存在是完全适合这项工作的。谢谢精巧的PHP的功能让我惊讶不已,我不知道它们的存在是完全适合这项工作的。谢谢