我正在使用PHP。我有一个对象数组,并想将一个对象添加到其末尾。
$myArray[] = null; //adds an element
$myArray[count($myArray) - 1]->name = "my name"; //modifies the element I just added
上面的代码是可以工作的,但是有没有更简洁和易读的方式来编写它?也许只需要一行?
我正在使用PHP。我有一个对象数组,并想将一个对象添加到其末尾。
$myArray[] = null; //adds an element
$myArray[count($myArray) - 1]->name = "my name"; //modifies the element I just added
上面的代码是可以工作的,但是有没有更简洁和易读的方式来编写它?也许只需要一行?
只需要执行:
$object = new stdClass();
$object->name = "My name";
$myArray[] = $object;
你需要先创建对象(new
那一行),然后再将其推入数组末尾([]
那一行)。
你也可以这样做:
$myArray[] = (object) ['name' => 'My name'];
然而,我认为这不够易读,即使它更加简洁。
(object)
转换为 PHP,即使代码的意图不太清晰。请参见我的答案编辑。 - halfer$myArray[] = new MyClass("My name");
但有些对象无法在构造函数中设置所有数据。那么更容易的方法是先创建对象,设置参数,然后再添加它。 - Erk这里是我发现的一种简洁的方法:
$myArray = [];
array_push($myArray, (object)[
'key1' => 'someValue',
'key2' => 'someValue2',
'key3' => 'someValue3',
]);
return $myArray;
你真的需要一个对象吗?那么这样做如何:
$myArray[] = array("name" => "my name");
只需使用二维数组。
输出(var_dump):
array(1) {
[0]=>
array(1) {
["name"]=>
string(7) "my name"
}
}
echo $myArray[count($myArray) - 1]["name"];
Something like:
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。调用后,只有两个正确的元素保留下来。
function __construct
)的相关资料。它们是 PHP 内置的一种方法,可以完成你在示例中所做的工作! - Erkprivate function TestClass
做的是同样的事情,这是在PHP 4中设置构造函数的旧方法。从PHP 5开始,你的方法更受欢迎。 - halfer:-)
。 - halfer