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

88
//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представляет собой массив данных динамического размера.

Фил
источник

Ответы:

96

Я думаю ты хочешь $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);
ThiefMaster
источник
9
Другие программисты будут ненавидеть вас за опечатки, потому что они тоже будут вынуждены их делать или исправлять.
ThiefMaster
Мне было слишком комфортно с array_push, я забыл основы! Действительно полезно!
CLOUGH
121

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

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

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

$data += [$category => $question];
Мохиаддин Алаоддин
источник
21
что в мире?
Фил
9
Это правильный ответ на добавление элементов в ассоциативный массив.
andreszs
7
Также добавьте несколько элементов: $ data + = ['x' => 1, 'y' => 2];
split19
это способ, если вы не хотите, чтобы в массиве было больше одного объекта
DragonFire,
Примечание: это может сработать, если в вашем массиве еще нет элемента с таким же ключом, поэтому он не может перезаписать существующий элемент.
Мохамад Хамудей,
29

до цикла:

$data = array();

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

$data[] = array($catagory => $question);
мо
источник
2
Если вы сделаете это таким образом, не забудьте сначала инициализировать массив, используя $ data = array (); иначе php выдаст уведомление
Alex Bailey
Я думаю, что ТАК кэширует мой ответ, так как я его опубликовал, я понял, что не видел, чтобы он инициализировался в его коде. Я добавил это и потом увидел ваш комментарий, спасибо :-)
moe
4
Это не сработало, потому что внутри массива был создан массив. Извините, если мой вопрос прошел через вас.
Фил
PHP 5.4+, вы можете написать немного меньше кода:$data=[]; $data[] = [$category => $question];
Джастин
$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];не работает с неопределенным индексом: foo in .. , но предложенный ниже знак плюса работает.
qrtLs
7

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

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

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

array_push($data,$question);
Майк
источник
6

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

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

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

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

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

Максимран
источник