it-swarm.com.ru

В PHP, как я могу добавить элемент объекта в массив?

Я использую PHP. У меня есть массив объектов, и я хотел бы добавить объект в конце этого.

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

Вышесказанное является функциональным, но есть ли более понятный и понятный способ написать это? Может быть, одна строка?

21
adamdport

Просто делать:

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

Сначала необходимо создать объект (строка new), а затем вставить его в конец массива (строка []).

Вы также можете сделать это:

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

Тем не менее, я бы сказал, что это не так легко читается, даже если это более кратко.

63
halfer

Вам действительно нужен объект? Как насчет:

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

Просто используйте двумерный массив. 

Выход (var_dump):

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

Вы можете получить доступ к вашей последней записи, как это:

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

Что-то вроде:

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 правильных элемента.

2
Moisés Márquez

Вот еще один чистый метод, который я обнаружил, если у вас есть несколько записей в foreach:

$foo = [];

array_Push($foo, (object)[
        'key1' => 'fooValue'
        'key2' => 'fooValue2'
        'key3' => 'fooValue3'
]);

return $foo;
0
hinteractive02