25

オブジェクトの配列があり、stdClassそれらすべてのオブジェクトの特定のフィールドを使用してカンマ区切りのリストを作成したいと考えていstdClassます。私の配列は次のようになります。

$obj1 = stdClass Object ( [foo] => 4 [bar] => 8 [foo-bar] => 15 );
$obj2 = stdClass Object ( [foo] => 16 [bar] => 23 [foo-bar] => 42 );
$obj3 = stdClass Object ( [foo] => 76 [bar] => 79 [foo-bar] => 83 );

$a = array(1=>$obj1 , 2=>$obj2 , 3=>$obj3);

fooそして、その配列内のすべてのstdClassオブジェクトを分解して、コンマ区切りのリストを作成したいと考えています。したがって、望ましい結果は次のとおりです。

4,16,76

このオブジェクトの配列をループに通すことなく、implode (またはその他のミステリー関数) でこれを行う方法はありますか?

4

9 に答える 9

37

あなたは使用することができarray_map()ますimplode()...

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

$a = implode(", ", $a);
于 2012-05-31T12:54:09.513 に答える
14

PHP 7.0+ では、これを使用できますarray_column

echo implode(',', array_column($a, 'foo'));
于 2019-05-29T00:03:37.107 に答える
9

これは実際に私が見つけた最良の方法です。オブジェクトの配列は動的サイズを処理できる必要があるため、ここでは適切に回答されていないようです。

$str = implode(',', array_map(function($x) { return $x->foo; }, $a));
于 2016-03-31T15:47:21.643 に答える
6

これに対する非常に優れたソリューションはarray_reduce()、配列を単一の値に減らす関数です。

$str = array_reduce($a, function($v, $w) {
    if ($v) $v .= ',';
    return $v . $w->foo;
});
于 2012-05-31T12:58:35.107 に答える
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));
于 2012-05-31T12:54:34.550 に答える
0

いいえ、あなたができる最善の方法は、繰り返し処理し、オブジェクトで tostring() を呼び出し、結果を新しい配列に入れて implode を呼び出すことです。

于 2012-05-31T12:54:51.353 に答える