İ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.