Добавяне на елемент към асоциативен масив

//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
Мисля, че SO кешира отговора ми, тъй като го публикувах, осъзнах, че не го видях да се инициализира в неговия код. Така че го добавих и след това видях коментара ви, благодаря ви :-) - 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']; се проваля с Недефиниран индекс: 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

За всеки, който също трябва да добави в 2d асоциативен масив, можете също да използвате отговора, даден по-горе, и да използвате кода като този

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

след това можете да го извикате (за да тествате резултата чрез:

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

който трябва да отпечата $question

person maximran    schedule 19.12.2017