我正在使用PHP。我有一个对象数组,并希望在它的末尾添加一个对象。
$myArray[] = null; //adds an element
$myArray[count($myArray) - 1]->name = "my name"; //modifies the element I just added
以上是功能性的,但是有更清晰,更易读的方法吗?也许一行?
答案 0 :(得分:69)
只是做:
$object = new stdClass();
$object->name = "My name";
$myArray[] = $object;
您需要先创建对象(new
行),然后将其推送到数组的末尾([]
行)。
你也可以这样做:
$myArray[] = (object) array('name' => 'My name');
然而,我认为即使它更简洁,也不具备可读性。
答案 1 :(得分:5)
你真的需要一个物体吗?怎么样:
$myArray[] = array("name" => "my name");
只需使用二维数组。
输出(var_dump):
array(1) {
[0]=>
array(1) {
["name"]=>
string(7) "my name"
}
}
您可以像这样访问上一个条目:
echo $myArray[count($myArray) - 1]["name"];
答案 2 :(得分:2)
类似的东西:
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个正确的元素存在。
答案 3 :(得分:0)
如果您在foreach
中有多个记录,这是我发现的另一种干净的方法:
$foo = [];
array_push($foo, (object)[
'key1' => 'fooValue'
'key2' => 'fooValue2'
'key3' => 'fooValue3'
]);
return $foo;