Как создать несколько объектов с одинаковым свойством, используя foreach php - PullRequest
0 голосов
/ 28 июня 2018

У меня есть поиск для создания нескольких объектов с одинаковыми свойствами, но я не нашел решения. Итак, я создаю этот объект.

$monthData = new \stdClass();
foreach($quotesData as $datas){

   $monthData->name =  $datas[0] ["monthname"];
   $monthData->data = $datas[0] ["price"];
}

но он создает только один объект

и когда я делаю $ monthData [$ i] -> name, php генерирует исключение. Невозможно использовать объект типа stdClass в качестве массива в файле

поэтому я хочу получить результирующий объект, подобный этому

{
        name: 'Jane',
        data: [1, 0, 4]
    }, {
        name: 'John',
        data: [5, 7, 3]
    }

но он дал мне только один объект взамен

   {
        name: 'Jane',
        data: [1, 0, 4]
    }

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это потому, что вы объявляете свои $ monthData как один объект, это означает, что когда вы перебираете свои данные, последний элемент в массиве фактически устанавливает данные объекта. Вы хотите создать массив, а затем добавить объекты в массив:

$monthData = array();

foreach ($data as $key => $value)
{
    # define obj per loop
    $myObj = new \stdClass();

    # set obj data with loop data
    $myObj->data = $value['some_key'];
    # etc. etc.

    $monthData[] = $myObj;    
}

var_dump($monthData); # will display array of objects to use
0 голосов
/ 28 июня 2018

У меня есть поиск для создания нескольких объектов с одинаковыми свойствами, но я не нашел решения

Нет. Он работает так, как вы написали - прочитайте ваш код еще раз. Что вы делаете: вы создаете новый объект, а затем зацикливаете и изменяете свойства этого объекта. Если вам нужно несколько объектов, вам нужно создать цикл:

foreach(...) {
   $obj = new ...
   $obj-> ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...