Saya telah mencari tetapi tidak dapat menemukan jawaban untuk kasus penggunaan khusus saya. Saya ingin menambahkan elemen ke array multidimensi sambil mengulanginya. Apa yang saya miliki sebelum loop:

Array
(
    [fname] => Monty
    [lname] => Python
    [phone] => 555 555 1212
    [email] => a@b.com
    [modelList] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [modelName] => X-Wing
                    [remarks] => 
                    [htmlRemarks] => 
                    [category] => Vehicles
                    [catID] => 178
                    [attachedToBase] => 1
                    [oversized] => 0
                )

        )

)

Dalam kode, saya mengulang melalui array [modelList] dan setelah melakukan beberapa operasi database yang ingin saya lakukan adalah menambahkan elemen baru ke setiap model array - dalam kasus di bawah ini, [dbID]:

Array
(
    [fname] => Monty
    [lname] => Python
    [phone] => 555 555 1212
    [email] => a@b.com
    [modelList] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [modelName] => X-Wing
                    [remarks] => 
                    [htmlRemarks] => 
                    [category] => Vehicles
                    [catID] => 178
                    [attachedToBase] => 1
                    [oversized] => 0
                    [dbID] => 907
                )

        )

)

Semua input berasal dari formulir POST, dan di penangan php saya:

// Loop thru model entries
$modelList = json_decode($_POST["modelList"], TRUE); 
foreach($modelList as $model) {

    (do some work)

    // Add the new element
    array_push($model['dbID'], $newID);
}

Tapi ini menimbulkan kesalahan:

PHP Warning:  array_push() expects parameter 1 to be array, null given

Bagaimana saya bisa menambahkan elemen baru ke sub-array?

-1
NCC1701 7 Januari 2021, 19:51

3 jawaban

Jawaban Terbaik

Ditemukan - Saya perlu menggunakan referensi ke $model untuk memperbaruinya

// Loop thru model entries
$modelList = json_decode($_POST["modelList"], TRUE); 
foreach($modelList as &$model) {

    (do some work)

    // Add the new element
    $model['dbID'] = $newID;
}
unset($model);
0
NCC1701 7 Januari 2021, 17:09

array_push

Dorong satu atau lebih elemen ke akhir array

Anda tidak dapat menambahkan item nilai kunci ke array menggunakan array_push.
Gunakan ini sebagai gantinya:

foreach ($modelList as $key => $model){
  $modelList[$key]['dbID'] = $newID;
}
1
Reqven 7 Januari 2021, 17:04

Berdasarkan cuplikan Anda dengan loop, apakah Anda mencoba untuk benar-benar memperbarui dbID?

Jika demikian, Anda harus mengubah logika menjadi:

foreach ($modelList as $key => $model) {

    (do some work)
   
    $modelList[$key]['dbID'] = $newID;
}

Mengapa:

  • anda tidak dapat mengubah isi dari array yang anda ulangi (kecuali diakses dengan referensi)
  • dalam kode contoh Anda $model['dbID'] adalah nomor 907 yang bukan array, karenanya pesan kesalahan
0
helvete 7 Januari 2021, 17:03