Menambahkan item ke array asosiatif

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

}

Ini tidak berfungsi karena menggantikan nilai data. Bagaimana saya bisa menambahkan nilai asosiatif setiap loop? $file_dataadalah larik data yang memiliki ukuran dinamis.

Phil
sumber

Jawaban:

98

Saya pikir Anda mau $data[$category] = $question;

Atau jika Anda menginginkan larik yang memetakan kategori ke larik pertanyaan:

$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
sumber
9
Programer lain akan membenci Anda karena kesalahan ketik karena mereka akan dipaksa untuk melakukannya juga, atau memperbaikinya.
ThiefMaster
Saya terlalu nyaman dengan array_push, lupa dasar-dasarnya! Sangat membantu!
CLOUGH
122

Anda cukup melakukan ini

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

Jika Anda menjalankan php 5.4+

$data += [$category => $question];
Mohyaddin Alaoddin
sumber
9
Ini adalah jawaban yang benar untuk menambahkan item ke array asosiatif.
andreszs
7
Tambahkan beberapa elemen juga: $ data + = ['x' => 1, 'y' => 2];
split 19
ini adalah cara jika Anda tidak ingin berakhir dengan lebih dari satu objek di dalam array
DragonFire
Catatan: ini dapat berfungsi jika array Anda belum memiliki elemen dengan kunci yang sama sehingga tidak dapat menimpa elemen yang sudah ada.
Mohamad Hamouday
29

before for loop:

$data = array();

lalu di loop Anda:

$data[] = array($catagory => $question);
moe
sumber
2
Jika Anda melakukannya dengan cara itu jangan lupa untuk menginisialisasi array terlebih dahulu dengan menggunakan $ data = array (); atau php akan memberi tahu
Alex Bailey
Saya pikir SO menyimpan jawaban saya, seperti yang diposting, saya menyadari saya tidak melihatnya diinisialisasi dalam kodenya. Jadi saya menambahkannya dan saya melihat komentar Anda setelah itu, terima kasih :-)
moe
4
Ini tidak berfungsi karena membuat array di dalam array. Maaf Jika pertanyaan saya agak mengganggu Anda.
Phil
PHP 5.4+ Anda dapat menulis lebih sedikit kode:$data=[]; $data[] = [$category => $question];
Justin
$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];gagal dengan indeks Undefined: foo in .. , tetapi tanda plus di bawah ini berfungsi.
qrtLs
7

Saya tahu ini adalah pertanyaan lama tetapi Anda dapat menggunakan:

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

Ini akan mendorong arrayke ujung arus Anda array. Atau jika Anda hanya mencoba menambahkan nilai tunggal ke akhir array Anda, tidak lebih banyak array maka Anda dapat menggunakan ini:

array_push($data,$question);
Mike
sumber
6

Bagi siapa saja yang juga perlu menambahkan array asosiatif 2d, Anda juga dapat menggunakan jawaban yang diberikan di atas, dan menggunakan kode seperti ini

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

Anda kemudian dapat memanggilnya (untuk menguji hasilnya dengan:

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

yang seharusnya mencetak $ pertanyaan

maximran
sumber