Anda mungkin menemukan ini sedikit lebih intuitif. Hanya membutuhkan satu panggilan fungsi untuk array_splice:
$original = array('a','b','c','d','e');
$inserted = array('x');// not necessarily an array, see manual quote
array_splice( $original,3,0, $inserted );// splice in at position 3// $original is now a b c x d e
Jika penggantian hanya satu elemen, tidak perlu menempatkan array () di sekitarnya, kecuali elemen itu sendiri array, objek atau NULL.
Sungguh aneh bahwa fungsi dasar semacam itu sebenarnya tersembunyi, karena tujuan utama fungsi ini seperti yang dijelaskan dalam dokumentasi adalah sesuatu yang berbeda (ganti barang dalam array). Ya, itu ditunjukkan di bagian argumen, tetapi jika Anda hanya memindai deskripsi fungsi untuk menemukan apa yang akan digunakan untuk memasukkan dalam array Anda tidak akan pernah menemukannya.
Mahn
24
Hanya mengatakan bahwa ini tidak akan menyimpan kunci dalam $inserted array.
@ JacerOmri itu sepenuhnya benar, kedua pernyataan tersebut valid. Anda bisa melewatkan nilai jenis apa pun, tetapi mungkin tidak berperilaku sama untuk array, objek, atau nol. Untuk skalar, tipe-casting (array)$scalarsetara dengan array($scalar), tetapi untuk array, objek, atau null, itu akan diabaikan (array), dikonversi ke array (objek), atau menjadi array kosong (nol) - lihat php.net / manual / en / ...
Lukas
2
@ SunilPachlangia, adelval, dan lainnya: dengan array multi-dimensi Anda perlu membungkus penggantian dalam sebuah array, itu didokumentasikan. Saya masih membawa catatan itu di sini sehingga orang-orang berhenti melakukan kesalahan.
Félix Gagnon-Grenier
47
Fungsi yang dapat disisipkan pada posisi integer dan string:
The array_splice()kehilangan kunci, sedangkan array_merge()tidak. Jadi hasil dari fungsi pertama bisa sangat mengejutkan ... Terutama karena jika Anda memiliki dua elemen dengan kunci yang sama, hanya nilai yang terakhir disimpan ...
Ini berfungsi dengan baik. Namun, dalam contoh kedua, dalam fungsi Anda insertBefore(), Anda harus kembali $tmpArraybukan $input.
Christoph Fischer
4
Berdasarkan @Halil jawaban yang bagus, berikut adalah fungsi sederhana cara menyisipkan elemen baru setelah kunci tertentu, sambil mempertahankan kunci integer:
Jika Anda ingin menyimpan kunci array awal dan juga menambahkan array yang memiliki kunci, gunakan fungsi di bawah ini:
function insertArrayAtPosition( $array, $insert, $position ){/*
$array : The initial array i want to modify
$insert : the new array i want to add, eg array('key' => 'value') or array('value')
$position : the position where the new array will be inserted into. Please mind that arrays start at 0
*/return array_slice($array,0, $position, TRUE)+ $insert + array_slice($array, $position, NULL, TRUE);}
Inilah yang bekerja untuk saya untuk array asosiatif:
/*
* Inserts a new key/value after the key in the array.
*
* @param $key
* The key to insert after.
* @param $array
* An array to insert in to.
* @param $new_key
* The key to insert.
* @param $new_value
* An value to insert.
*
* @return
* The new array if the key exists, FALSE otherwise.
*
* @see array_insert_before()
*/function array_insert_after($key, array &$array, $new_key, $new_value){if(array_key_exists($key, $array)){
$new = array();foreach($array as $k => $value){
$new[$k]= $value;if($k === $key){
$new[$new_key]= $new_value;}}return $new;}return FALSE;}
Sumber fungsi - posting blog ini . Ada juga fungsi praktis untuk menyisipkan SEBELUM kunci khusus.
Solusi oleh jay.lee sempurna. Jika Anda ingin menambahkan item ke array multidimensi, pertama tambahkan array dimensi tunggal dan kemudian ganti sesudahnya.
Menambahkan item dalam format yang sama ke array ini akan menambahkan semua indeks array baru sebagai item, bukan hanya item.
$new = array('title'=>'Time','width'=>10);
array_splice($original,1,0,array('random_string'));// can be more items
$original[1]= $new;// replaced with actual item
Catatan: Menambahkan item secara langsung ke array multidimensi dengan array_splice akan menambahkan semua indeksnya sebagai item, bukan hanya item itu.
Untuk memasukkan elemen ke dalam array dengan kunci string, Anda dapat melakukan sesuatu seperti ini:
/* insert an element after given array key
* $src = array() array to work with
* $ins = array() to insert in key=>array format
* $pos = key that $ins will be inserted after
*/function array_insert_string_keys($src,$ins,$pos){
$counter=1;foreach($src as $key=>$s){if($key==$pos){break;}
$counter++;}
$array_head = array_slice($src,0,$counter);
$array_tail = array_slice($src,$counter);
$src = array_merge($array_head, $ins);
$src = array_merge($src, $array_tail);return($src);}
Jawaban:
Anda mungkin menemukan ini sedikit lebih intuitif. Hanya membutuhkan satu panggilan fungsi untuk
array_splice
:sumber
$inserted
array.(array)$scalar
setara denganarray($scalar)
, tetapi untuk array, objek, atau null, itu akan diabaikan (array), dikonversi ke array (objek), atau menjadi array kosong (nol) - lihat php.net / manual / en / ...Fungsi yang dapat disisipkan pada posisi integer dan string:
Penggunaan bilangan bulat:
Penggunaan String:
sumber
array_splice()
kehilangan kunci, sedangkanarray_merge()
tidak. Jadi hasil dari fungsi pertama bisa sangat mengejutkan ... Terutama karena jika Anda memiliki dua elemen dengan kunci yang sama, hanya nilai yang terakhir disimpan ...sumber
+
alih-aliharray_merge
dapat menyimpan kunciDengan cara ini Anda dapat memasukkan array:
sumber
Tidak ada fungsi PHP asli (yang saya ketahui) yang dapat melakukan persis apa yang Anda minta.
Saya telah menulis 2 metode yang saya yakini cocok untuk tujuan:
Meskipun lebih cepat dan mungkin lebih hemat memori, ini hanya benar-benar cocok jika tidak perlu mempertahankan kunci-kunci array.
Jika Anda perlu mempertahankan kunci, yang berikut ini akan lebih cocok;
sumber
insertBefore()
, Anda harus kembali$tmpArray
bukan$input
.Berdasarkan @Halil jawaban yang bagus, berikut adalah fungsi sederhana cara menyisipkan elemen baru setelah kunci tertentu, sambil mempertahankan kunci integer:
sumber
Jika Anda ingin menyimpan kunci array awal dan juga menambahkan array yang memiliki kunci, gunakan fungsi di bawah ini:
Contoh panggilan:
sumber
sumber
Inilah yang bekerja untuk saya untuk array asosiatif:
Sumber fungsi - posting blog ini . Ada juga fungsi praktis untuk menyisipkan SEBELUM kunci khusus.
sumber
Ini juga solusi yang berfungsi:
kredit masuk ke: http://binarykitten.com/php/52-php-insert-element-and-shift.html
sumber
jika tidak yakin, maka JANGAN GUNAKAN INI :
ATAU
karena dengan + array asli akan ditimpa. ( lihat sumber )
sumber
Solusi oleh jay.lee sempurna. Jika Anda ingin menambahkan item ke array multidimensi, pertama tambahkan array dimensi tunggal dan kemudian ganti sesudahnya.
Menambahkan item dalam format yang sama ke array ini akan menambahkan semua indeks array baru sebagai item, bukan hanya item.
Catatan: Menambahkan item secara langsung ke array multidimensi dengan array_splice akan menambahkan semua indeksnya sebagai item, bukan hanya item itu.
sumber
Anda bisa menggunakan ini
sumber
Biasanya, dengan nilai skalar:
Untuk memasukkan elemen array tunggal ke dalam array Anda jangan lupa untuk membungkus array dalam array (karena itu adalah nilai skalar!):
jika tidak, semua kunci array akan ditambahkan sepotong demi sepotong.
sumber
Petunjuk untuk menambahkan elemen di awal array :
kemudian:
tapi:
sumber
array_unshift($a,'i am the new first element');
Coba yang ini:
sumber
Contoh panggilan:
sumber
Untuk memasukkan elemen ke dalam array dengan kunci string, Anda dapat melakukan sesuatu seperti ini:
sumber
$src = array_merge($array_head, $ins, $array_tail);
?