如何在stdClass对象数组上使用implode?

时间:2012-05-31 12:51:06

标签: php arrays implode csv stdclass

我有一组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

有没有办法用implode(或其他一些神秘函数)来做这个,而不必把这个对象数组放到一个循环中?

9 个答案:

答案 0 :(得分:30)

您可以使用array_map()implode() ...

$a = array_map(function($obj) { return $obj->foo; }, 
               array(1=>$obj1 , 2=>$obj2 , 3=>$obj3));

$a = implode(", ", $a);

答案 1 :(得分:7)

这实际上是我发现的最好的方法,它似乎没有在这里正确回答,因为对象数组应该能够处理动态大小。

$str = implode(',', array_map(function($x) { return $x->foo; }, $a));

这似乎也是我见过的最干净的解决方案。

答案 2 :(得分:6)

您可以按照Ray的建议在课程中设置__toString(),但您不需要首先遍历arrayimplode()将直接调用对象的__toString()函数(也可以使用关联数组,顺便说一下)。

答案 3 :(得分:4)

一个非常巧妙的解决方案是array_reduce()函数,它将数组减少为单个值:

$str = array_reduce($a, function($v, $w) {
    if ($v) $v .= ',';
    return $v . $w->foo;
});

答案 4 :(得分:1)

echo implode("','",(array)$data->stdArray);

答案 5 :(得分:0)

我想最简单的方法是创建一个ID索引数组,然后在array_keys上调用implode:

$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));

答案 6 :(得分:0)

不,你可以做的最好的事情是迭代,在对象上调用tostring()并将结果放在一个新的数组中以调用implode。

答案 7 :(得分:0)

如果它是一个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);

答案 8 :(得分:0)

使用PHP 7.0+,您可以为此使用array_column

echo implode(',', array_column($a, 'foo'));