在 PHP 中,如何将对象元素添加到数组中?

Posted

技术标签:

【中文标题】在 PHP 中,如何将对象元素添加到数组中?【英文标题】:In PHP, how can I add an object element to an array? 【发布时间】:2013-01-12 09:33:24 【问题描述】:

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

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

上面是函数式的,但是有没有一种更简洁、更易读的方式来编写它?可能是一行?

【问题讨论】:

这无法正常工作。它应该抛出一个错误:Accessing property of a null object at line 2 in *** example @sinistraD - PHP 不在乎它是 null。它会将其转换为对象并设置属性,然后emit a warning。 这将引发空对象警告。 【参考方案1】:

只要做:

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

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

您也可以这样做:

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

但我认为它不那么可读,即使它更简洁。

【讨论】:

+1 以提高可读性,但现在是三行。我无法在声明中创建对象? 我认为@nickb 是对的,您可以隐式创建对象,但我不推荐这样做,因为这样做可能会引发警告。 我认为您可以将 (object) 转换为 PHP,即使代码的意图不太清楚。请参阅我的答案编辑。 @adamdport 这取决于你的类的定义。如果它在其构造函数中使用名称,您可以这样做:$myArray[] = new MyClass("My name"); 但有些对象将无法在构造函数中设置所有数据。然后创建对象,设置参数,然后添加就更容易了。【参考方案2】:

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

$myArray = [];

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

return $myArray;

【讨论】:

【参考方案3】:

你真的需要一个对象吗?怎么样:

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

只需使用二维数组即可。

输出(var_dump):

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

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

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

【讨论】:

当我尝试访问 $myArray[0][0] 时出现错误。 @MartinStein 在上面的示例中,您将使用 $myArray[0]["name"] 因为第二项它是一个对象。【参考方案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 个正确的元素。

【讨论】:

我建议阅读构造函数 (function __construct)。它们是按照您在示例中所做的事情而构建的 PHP! @Erk:private function TestClass 方法做同样的事情,这是 PHP 中设置构造函数的旧方法(来自 PHP 4)。从 PHP 5 开始,首选您的方式。 @halfer,今年春天我有一段时间以为我了解 PHP。从那以后我意识到我没有:D @Erk:这是一个永无止境的旅程,可以使用任何语言:-) @halfer,当然,你是对的,但 PHP 是我遇到的第一个既是又不是同时存在的语言。我在 PHP 有和没有的指针上崩溃并烧毁了,所以现在我回到 C# 和 Java :)

以上是关于在 PHP 中,如何将对象元素添加到数组中?的主要内容,如果未能解决你的问题,请参考以下文章

js如何往数组Array中添加元素?

js如何往数组Array中添加元素

如何在mongodb的数组对象的嵌套数组中添加元素

如何在AS3中向数组添加元素?

php 数组 将指定元素移至末尾

如何将json数据中的对象添加到nsmutablearray?