我有一个数组stdClass
对象,我想建立使用所有这些的一个具体领域中的逗号分隔的列表stdClass
对象。 我的数组是这样的:
$obj1 = stdClass Object ( [foo] => 4 [bar] => 8 [foo-bar] => 15 );
$obj1 = stdClass Object ( [foo] => 16 [bar] => 23 [foo-bar] => 42 );
$obj1 = stdClass Object ( [foo] => 76 [bar] => 79 [foo-bar] => 83 );
$a = array(1=>$obj1 , 2=>$obj2 , 3=>$obj3);
我想爆就foo
所有的stdClass
数组来创建一个逗号分隔的列表中的对象。 因此,期望的结果是:
4,16,76
有什么办法,而无需通过一个循环来把这个对象数组与破灭(或其他一些神秘的函数)来做到这一点?
Answer 1:
你可以使用array_map()
和implode()
...
$a = array_map(function($obj) { return $obj->foo; },
array(1=>$obj1 , 2=>$obj2 , 3=>$obj3));
$a = implode(", ", $a);
Answer 2:
其实,这是我找到的最好方式,它似乎并没有正确地在这里回答为对象的数组应该能够处理动态大小。
$str = implode(',', array_map(function($x) { return $x->foo; }, $a));
这也似乎是我见过的最干净的解决方案。
Answer 3:
实际上,你可以设置__toString()
在类雷的建议,但你并不需要通过遍历array
第一。 implode()
将直接调用__toString()
中的对象的功能(其还与关联数组,顺便说一句)。
Answer 4:
这方面的一个非常整洁的解决方案是array_reduce()
函数,其减少的阵列为单个值:
$str = array_reduce($a, function($v, $w) {
if ($v) $v .= ',';
return $v . $w->foo;
});
Answer 5:
echo implode("','",(array)$data->stdArray);
Answer 6:
我想最简单的方法是创建一个ID索引数组,然后调用内爆上array_keys:
$a = array();
$a[4] = stdClass Object ( [foo] => 4 [bar] => 8 [foo-bar] => 15 );
$a[16] = stdClass Object ( [foo] => 16 [bar] => 23 [foo-bar] => 42 );
$a[76] = stdClass Object ( [foo] => 76 [bar] => 79 [foo-bar] => 83 );
echo implode(', ', array_keys($a));
Answer 7:
不,你能做的最好的遍历,调用toString()的对象,并把结果放在一个新的数组来调用内爆上。
Answer 8:
如果它是一个1级的对象,这为我工作。
function implodeObjValues($glue, $obj) {
$s = "";
foreach($obj[1] as $n=>$v) {
$s .= $glue . $v;
}
return substr($s,strlen($glue));
}
function implodeObjLabels($glue, $obj) {
$s = "";
foreach($obj[1] as $n=>$v) {
$s .= $glue . $n;
}
return substr($s,strlen($glue));
}
可以包括由式多层次的过程,但我并不需要那个呢。 希望这可以帮助。
方便的用于转换的MySQL对象返回给数组。
$db = new mysqli("localhost",$usr,$pw,$db);
$row = $db->query("SHOW TABLES");
$a = implodeObjValues("|",$row);
Answer 9:
随着PHP 7.0+,您可以使用array_column
这一点。
echo implode(',', array_column($a, 'foo'));
文章来源: How to use implode on an array of stdClass objects?