在 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 中,如何将对象元素添加到数组中?的主要内容,如果未能解决你的问题,请参考以下文章