İlişkilendirilebilir bir diziye bir öğe ekleme


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

}

Bu, verilerin değerini değiştirdiği için çalışmıyor. Yine de her döngüde ilişkilendirilebilir bir değer eklemesini nasıl sağlayabilirim? $file_datadinamik boyuta sahip bir veri dizisidir.

Yanıtlar:


98

Bence istiyorsun $data[$category] = $question;

Veya kategorileri bir dizi soruya eşleyen bir dizi istemeniz durumunda:

$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
Diğer programcılar da bunları yapmak veya düzeltmek zorunda kalacakları için yazım hataları için sizden nefret edecekler.
— ThiefMaster

Array_push ile çok rahattım, temelleri unuttum! Gerçekten yardımcı!
— CLOUGH

122

Bunu basitçe yapabilirsiniz

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

Php 5.4+ üzerinde çalışıyorsanız

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

9
Bu, ilişkilendirilebilir diziye öğe eklemenin doğru cevabıdır.
— andreszs

7
Birden çok öğe de ekleyin: $ data + = ['x' => 1, 'y' => 2];
— 2019

dizinin içinde birden fazla nesne olmasını istemiyorsanız bu, yoldur
— DragonFire

Not: Bu, dizinizde aynı anahtara sahip öğe yoksa işe yarayabilir, bu nedenle mevcut bir öğenin üzerine yazamaz.
— Mohamad Hamouday

29

döngüden önce:

$data = array();

sonra döngünüzde:

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

2
Bunu bu şekilde yaparsanız, önce $ data = array (); kullanarak diziyi başlatmayı unutmayın; yoksa php bir bildirim atar
— Alex Bailey

Sanırım SO cevabımı önbelleğe alıyor, çünkü gönderildiği gibi, onun kodunda başlatıldığını görmediğimi fark ettim. Bu yüzden ekledim ve daha sonra yorumunuzu gördüm, teşekkür ederim :-)
— moe

4
Bu, dizinin içinde bir dizi oluşturduğu için işe yaramadı. Özür dilerim eğer sorum sizden geçtiyse.
— Phil

PHP 5.4+ biraz daha az kod yazabilirsiniz:$data=[]; $data[] = [$category => $question];
— Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];Tanımsız indeks: foo in .. ile başarısız olur , ancak aşağıda önerilen artı işareti çalışır.
— qrtLs

7

Bunun eski bir soru olduğunu biliyorum ama şunu kullanabilirsiniz:

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

Bu, akımınızın arraysonuna doğru itecektir array. Veya dizinizin sonuna daha fazla dizi değil, tek değerler eklemeye çalışıyorsanız, bunu kullanabilirsiniz:

array_push($data,$question);

6

Ayrıca 2d ilişkisel diziye eklemesi gereken herkes için, yukarıda verilen yanıtı da kullanabilir ve kodu bunun gibi kullanabilirsiniz.

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

daha sonra arayabilirsin (sonucu test etmek için:

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

$ soru yazdırmalı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.