Добавление элемента в ассоциативный массив

//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

Это не работает, поскольку заменяет значение данных. Как я могу добавить ассоциативное значение в каждый цикл? $file_data - это массив данных динамического размера.


person Phil    schedule 21.03.2011    source источник


Ответы (5)


Я думаю, ты хочешь $data[$category] = $question;

Или, если вам нужен массив, который отображает категории в массив вопросов:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);
person ThiefMaster    schedule 21.03.2011
comment
Другие программисты будут ненавидеть вас за опечатки, поскольку они тоже будут вынуждены их делать или исправлять. - person ThiefMaster; 22.03.2011
comment
Мне было слишком комфортно с array_push, я забыл основы! Действительно полезно! - person CLOUGH; 26.03.2018

Вы можете просто сделать это

$data += array($category => $question);

Если вы работаете на php 5.4+

$data += [$category => $question];
person Mohyaddin Alaoddin    schedule 08.09.2014
comment
Это правильный ответ на добавление элементов в ассоциативный массив. - person andreszs; 18.12.2017
comment
Также добавьте несколько элементов: $ data + = ['x' = ›1, 'y' =› 2]; - person split19; 31.01.2019
comment
это способ, если вы не хотите, чтобы в массиве было более одного объекта - person DragonFire; 07.04.2020
comment
Примечание: это может сработать, если в вашем массиве еще нет элемента с таким же ключом, поэтому он не может перезаписать существующий элемент. - person Mohamad Hamouday; 03.05.2020

до цикла:

$data = array();

затем в вашем цикле:

$data[] = array($catagory => $question);
person moe    schedule 21.03.2011
comment
Если вы сделаете это таким образом, не забудьте сначала инициализировать массив, используя $ data = array (); иначе php выдаст уведомление - person Alex Bailey; 22.03.2011
comment
Я думаю, что ТАК кеширует мой ответ, так как я его опубликовал, я понял, что не видел, чтобы он инициализировался в его коде. Я добавил его и потом увидел ваш комментарий, спасибо :-) - person moe; 22.03.2011
comment
Это не сработало, потому что внутри массива был создан массив. Извините, если мой вопрос прошел через вас. - person Phil; 22.03.2011
comment
PHP 5.4+ вы можете написать немного меньше кода: $data=[]; $data[] = [$category => $question]; - person Justin; 21.03.2014
comment
$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo']; не работает с Undefined index: foo in .., но предложенный ниже знак плюса работает. - person qrtLs; 02.01.2017
comment
это добавляется к массиву, но как отдельный объект - person DragonFire; 11.04.2020

Я знаю, что это старый вопрос, но вы можете использовать:

array_push($data, array($category => $question));

Это подтолкнет array к концу вашего текущего array. Или, если вы просто пытаетесь добавить отдельные значения в конец вашего массива, а не больше массивов, вы можете использовать это:

array_push($data,$question);
person Mike    schedule 29.06.2017

Для всех, кому также необходимо добавить в 2-мерный ассоциативный массив, вы также можете использовать ответ, указанный выше, и использовать такой код

 $data[$category]["test"] = $question

затем вы можете вызвать его (чтобы проверить результат:

echo $data[$category]["test"];

который должен напечатать $ question

person maximran    schedule 19.12.2017