57

我正在使用 PHP。我有一个对象数组,并想在它的末尾添加一个对象。

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

以上是功能性的,但是是否有一种更简洁、更易读的方式来编写它?也许是一条线?

4

4 回答 4

117

做就是了:

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

您需要先创建对象(new线),然后将其推到数组的末端([]线)。

你也可以这样做:

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

然而,我认为这不是那么可读,即使它更简洁。

于 2013-01-28T22:34:49.473 回答
32

这是我发现的一个干净的方法:

$myArray = [];

array_push($myArray, (object)[
        'key1' => 'someValue',
        'key2' => 'someValue2',
        'key3' => 'someValue3',
]);

return $myArray;
于 2019-02-09T06:49:08.200 回答
7

你真的需要一个对象吗?关于什么:

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

只需使用二维数组。

输出(var_dump):

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

您可以像这样访问您的最后一个条目:

echo $myArray[count($myArray) - 1]["name"];
于 2013-01-28T22:43:15.720 回答
4

就像是:

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 个元素。两个正确的对象和一个 NULL。调用后,只有 2 个正确的元素仍然存在。

于 2013-01-28T22:56:47.067 回答