Я использую 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) array('name' => 'My name');
Однако я бы сказал, что это не так читаемо, даже если оно более кратким.
Вам действительно нужен объект? Как насчет:
$myArray[] = array("name" => "my name");
Просто используйте двумерный массив.
Выход (var_dump):
array(1) { [0]=> array(1) { ["name"]=> string(7) "my name" } }
Вы можете получить доступ к своей последней записи следующим образом:
echo $myArray[count($myArray) - 1]["name"];
Что-то вроде:
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 правильных элемента.