Bayangkan kita memiliki dua array:
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
Sekarang, saya ingin memasukkan array('sample_key' => 'sample_value')
setelah elemen ketiga dari setiap array. Bagaimana saya bisa melakukannya?
Jawaban:
array_slice()
dapat digunakan untuk mengekstrak bagian-bagian array, dan operator array+
serikat pekerja ( ) dapat menggabungkan kembali bagian-bagian tersebut.Contoh ini:
memberi:
sumber
+
tidak boleh digunakan! Gunakanarray_merge
sebagai gantinya! Karena jika indeks bilangan bulat (array normal, bukan hash),+
tidak akan berfungsi seperti yang diharapkan !!!array_merge
Perilaku sehubungan dengan kunci numerik tidak sesuai untuk pertanyaan ini.count($array)-3
Anda hanya dapat menetapkan null untuk efek yang sama. Juga, menggunakanarray_merge
seperti yang disarankan TMS tidak akan mengharuskan Anda untuk menggunakan indeks yang unik. CONTOH: Tambahkan "nilai baru" ke array yang ada:$b = array_merge( array_slice( $a, 0, 1, true ), array( 'new-value' ), array_slice( $a, 1, null, true ) );
+
vsarray_merge
. Jika Anda ingin memasukkan sesuatu ke dalam array numerik, Anda tidak boleh menggunakannya+
karena itu mungkin tidak sesuai dengan harapan Anda. Tetapi Anda juga tidak boleh menggunakanarray_merge
; untuk array numerik, seluruh masalah ini diselesaikan denganarray_splice
fungsi. Untuk array asosiatif atau campuran, Anda mungkin tidak ingin kunci numerik diindeks ulang sehingga menggunakan+
sepenuhnya tepat.Untuk larik pertama Anda, gunakan
array_splice()
:keluaran:
untuk yang kedua tidak ada pesanan sehingga Anda hanya perlu melakukan:
Dan urutkan kunci dengan apa pun yang Anda inginkan.
sumber
kode:
contoh:
Mungkin tidak benar-benar terlihat sempurna, tetapi berhasil.
sumber
Inilah fungsi sederhana yang bisa Anda gunakan. Cukup pasang dan mainkan.
Ini adalah Insert By Index, Not By Value.
Anda dapat memilih untuk melewati array, atau menggunakan array yang sudah Anda nyatakan.
EDIT: Versi Lebih Pendek:
Sekarang Anda dapat menguji kodenya menggunakan
Dan hasilnya adalah:
sumber
sumber
Fungsi ini mendukung:
PEMAKAIAN:
HASIL:
sumber
Saya baru-baru menulis fungsi untuk melakukan sesuatu yang mirip dengan apa yang Anda coba, itu pendekatan yang mirip dengan jawaban clasvdb.
Pada dasarnya ia memasukkan pada titik tertentu, tetapi menghindari menimpa dengan menggeser semua item ke bawah.
sumber
Jika Anda tidak tahu bahwa Anda ingin memasukkannya di posisi # 3, tetapi Anda tahu kunci yang ingin Anda masukkan setelahnya, saya memasak fungsi kecil ini setelah melihat pertanyaan ini.
Berikut biola codepad untuk melihatnya beraksi: http://codepad.org/5WlKFKfz
Catatan: array_splice () akan jauh lebih efisien daripada array_merge (array_slice ()) tetapi kemudian kunci array yang Anda masukkan akan hilang. Mendesah.
sumber
Pendekatan yang lebih bersih (berdasarkan fluiditas penggunaan dan lebih sedikit kode).
Pemakaian:
sumber
Solusi paling sederhana, jika Anda ingin menyisipkan (elemen atau array) setelah kunci tertentu:
Jadi, jika Anda memiliki:
Dan jalankan:
Kamu akan memiliki:
sumber
Menggunakan array_splice bukan array_slice memberikan satu panggilan fungsi kurang.
sumber
Saya melakukan itu sebagai
sumber
Saya baru saja membuat kelas ArrayHelper yang akan membuat ini sangat mudah untuk indeks numerik.
Contoh:
Awal $ array:
Hasil:
sumber
Ini adalah metode yang lebih baik bagaimana memasukkan item ke array pada beberapa posisi.
sumber
Saya perlu sesuatu yang bisa melakukan penyisipan sebelum, ganti, setelah kunci; dan tambahkan di awal atau akhir array jika kunci target tidak ditemukan. Default adalah memasukkan setelah kunci.
Fungsi Baru
Masukkan kode
Keluaran
sumber
Jawaban 2 string yang sangat sederhana untuk pertanyaan Anda:
Pada awalnya Anda memasukkan apa pun ke elemen ketiga Anda dengan array_splice dan kemudian menetapkan nilai ke elemen ini:
sumber
Ini adalah pertanyaan lama, tetapi saya mengirim komentar pada tahun 2014 dan sering kembali ke sini. Saya pikir saya akan meninggalkan jawaban penuh. Ini bukan solusi terpendek tetapi cukup mudah dimengerti.
Masukkan nilai baru ke dalam array asosiatif, pada posisi bernomor, menjaga kunci, dan menjaga pesanan.
sumber
Tidak konkret jawaban Artefacto, tetapi berdasarkan sarannya menggunakan array_slice (), saya menulis fungsi selanjutnya:
Fitur:
Contoh penggunaan:
sumber
Jika Anda hanya ingin memasukkan item ke dalam array pada posisi tertentu (berdasarkan jawaban @clausvdb):
sumber
Ini versi saya:
sumber
cara mudah .. menggunakan
array_splice()
Hasil..
sumber
Ini adalah solusi lain di
PHP 7.1
sumber
Anda dapat menyisipkan elemen selama loop foreach , karena loop ini bekerja pada salinan array asli, tetapi Anda harus melacak jumlah baris yang dimasukkan (saya menyebutnya "mengasapi" dalam kode ini):
Jelas, Anda dapat menggeneralisasi ide "mengasapi" ini untuk menangani penyisipan dan penghapusan sewenang-wenang selama loop foreach.
sumber