Додавання елемента до асоціативного масиву


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);

9
Інші програмісти будуть ненавидіти вас за друкарські помилки, оскільки їх теж змусять робити або виправляти.
ThiefMaster

Мені було занадто комфортно з array_push, забув основи! Дійсно корисно!
КЛО

122

Ви можете просто зробити це

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

Якщо ви працюєте на php 5.4+

$data += [$category => $question];

21
що на світі?
Філ

9
Це правильна відповідь на додавання елементів до асоціативного масиву.
andreszs

7
Додайте також кілька елементів: $ data + = ['x' => 1, 'y' => 2];
split19

це спосіб, якщо ви не хочете, щоб у масиві
опинилося

Примітка: це може працювати, якщо у вашому масиві ще немає елемента з тим самим ключем, тому він не може перезаписати існуючий елемент.
Мохамад Хамудей

29

до циклу for:

$data = array();

то у вашому циклі:

$data[] = array($catagory => $question);

2
Якщо ви робите це таким чином, не забудьте спочатку ініціювати масив, використовуючи $ data = array (); інакше php надішле повідомлення
Alex Bailey

Я думаю, що SO кешує мою відповідь, оскільки soo, як її опублікував, я зрозумів, що не бачив, як вона ініціалізується в його коді. Тож я додав його і побачив згодом ваш коментар, дякую :-)
пн

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

Для тих, кому також потрібно додати в 2d асоціативний масив, ви також можете скористатися відповіддю, наведеною вище, і скористатися таким кодом

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

потім ви можете зателефонувати йому (щоб перевірити результат за допомогою:

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

який повинен надрукувати $ питання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.