web-dev-qa-db-ja.com

PHPでは、どのようにしてオブジェクト要素を配列に追加できますか?

PHPを使用しています。オブジェクトの配列があり、その最後にオブジェクトを追加したいと思います。

$myArray[] = null; //adds an element
$myArray[count($myArray) - 1]->name = "my name"; //modifies the element I just added

上記は機能的ですが、それを書くためのよりクリーンで読みやすい方法はありますか?たぶん一行?

27
adamdport

ただやる:

$object = new stdClass();
$object->name = "My name";
$myArray[] = $object;

最初にオブジェクト(new行)を作成してから、配列の最後にプッシュします([]行)。

これを行うこともできます:

$myArray[] = (object) ['name' => 'My name'];

しかし、もっと簡潔であっても、それはそれほど読みやすいものではないと主張します。

78
halfer

本当にオブジェクトが必要ですか?どうですか:

$myArray[] = array("name" => "my name");

2次元配列を使用するだけです。

出力(var_dump):

array(1) {
  [0]=>
  array(1) {
    ["name"]=>
    string(7) "my name"
  }
}

次のように最後のエントリにアクセスできます。

echo $myArray[count($myArray) - 1]["name"];
6
Frederik Kammer

何かのようなもの:

class TestClass {
private $var1;
private $var2;

private function TestClass($var1, $var2){
    $this->var1 = $var1;
    $this->var2 = $var2;
}

public static function create($var1, $var2){
    if (is_numeric($var1)){
        return new TestClass($var1, $var2);
    }
    else return NULL;
}
}

$myArray = array();
$myArray[] = TestClass::create(15, "asdf");
$myArray[] = TestClass::create(20, "asdfa");
$myArray[] = TestClass::create("a", "abcd");

print_r($myArray);

$myArray = array_filter($myArray, function($e){ return !is_null($e);});

print_r($myArray);

この構造が配列よりも望ましい状況があると思います。すべてのチェックロジックをクラスに移動できます。

ここで、array_filterの呼び出しの前に$ myArrayには3つの要素があります。 2つの正しいオブジェクトとNULL。呼び出し後、2つの正しい要素のみが保持されます。

2

foreach内に複数のレコードがある場合に発見した別のクリーンな方法を次に示します。

$foo = [];

array_Push($foo, (object)[
        'key1' => 'fooValue'
        'key2' => 'fooValue2'
        'key3' => 'fooValue3'
]);

return $foo;
1
hinteractive02