Saya memiliki larik berikut, yang ingin saya isi ulang sehingga kuncinya terbalik (idealnya dimulai dari 1):
Array saat ini ( edit: array sebenarnya terlihat seperti ini):
Array (
[2] => Object
(
[title] => Section
[linked] => 1
)
[1] => Object
(
[title] => Sub-Section
[linked] => 1
)
[0] => Object
(
[title] => Sub-Sub-Section
[linked] =>
)
)
Bagaimana seharusnya:
Array (
[1] => Object
(
[title] => Section
[linked] => 1
)
[2] => Object
(
[title] => Sub-Section
[linked] => 1
)
[3] => Object
(
[title] => Sub-Sub-Section
[linked] =>
)
)
Jawaban:
Jika Anda ingin mengindeks ulang mulai dari nol, cukup lakukan hal berikut:
Jika Anda memerlukannya untuk memulai, maka gunakan yang berikut ini:
Berikut adalah halaman manual untuk fungsi yang digunakan:
array_values()
array_combine()
range()
sumber
array_values
mengembalikan salinan array. Jadi, jika Anda memiliki referensi ke array makaarray_splice
akan lebih baik. Lihat solusi @imagiro.array_values()
membuatnya bekerja, jika Anda mulai dengan indeks 0 sepanjang waktu.Inilah cara terbaik :
itu kembali
dengan melakukan ini
kamu mendapatkan ini
Penjelasan
array_values()
: Mengembalikan nilai array input dan indeks secara numerik.array_filter()
: Memfilter elemen array dengan fungsi yang ditentukan pengguna (UDF Jika tidak ada yang disediakan , semua entri dalam tabel input bernilai FALSE akan dihapus .)sumber
array_filter()
tampaknya sama sekali tidak relevan dengan data sampel.Saya baru tahu Anda juga dapat melakukan
Itu melakukan pengindeksan ulang di tempat, sehingga Anda tidak berakhir dengan salinan array asli.
sumber
Mengapa mengindeks ulang? Cukup tambahkan 1 ke indeks:
Sunting Setelah pertanyaan diklarifikasi: Anda dapat menggunakan
array_values
untuk mengatur ulang indeks mulai dari 0. Kemudian Anda dapat menggunakan algoritme di atas jika Anda hanya ingin elemen yang dicetak dimulai pada 1.sumber
Yah, saya ingin berpikir bahwa untuk apa pun tujuan akhir Anda, Anda sebenarnya tidak perlu mengubah array menjadi 1 berbasis sebagai lawan dari 0, tetapi sebaliknya bisa menanganinya pada waktu iterasi seperti yang diposting Gumbo.
Namun , untuk menjawab pertanyaan Anda, fungsi ini harus mengubah array apa pun menjadi versi berbasis 1
EDIT
Inilah fungsi yang lebih dapat digunakan kembali / fleksibel, jika Anda menginginkannya
sumber
Ini akan melakukan apa yang Anda inginkan:
sumber
Anda mungkin ingin mempertimbangkan mengapa Anda ingin menggunakan array berbasis 1 sama sekali. Array berbasis nol (saat menggunakan array non-asosiatif) cukup standar, dan jika Anda ingin output ke UI, sebagian besar akan menangani solusi dengan hanya meningkatkan integer setelah output ke UI.
Pikirkan tentang konsistensi — baik dalam aplikasi Anda dan dalam kode yang Anda gunakan — ketika memikirkan pengindeks 1 berbasis untuk array.
sumber
Solusi yang lebih elegan:
sumber
Anda dapat mengindeks ulang array sehingga array baru dimulai dengan indeks 1 seperti ini;
Output dari di atas adalah;
sumber
array_values
sini. Lihat jawaban saya.Mirip dengan @monowerker, saya perlu mengindeks ulang array menggunakan kunci objek ...
Ini menghasilkan:
sumber
sumber
Jika Anda tidak mencoba menyusun ulang array, Anda cukup melakukan:
$ array = array_reverse ($ array);
$ array = array_reverse ($ array);
The array_reverse sangat cepat dan akan menata ulang saat membalikkan. Orang lain sudah lama menunjukkan ini pada saya. Jadi saya tidak bisa mengambil kredit untuk datang dengan itu. Tetapi sangat sederhana dan cepat.
sumber
Mirip dengan kontribusi Nick, saya datang ke solusi yang sama untuk mengindeks ulang array, tetapi sedikit meningkatkan fungsi sejak dari PHP versi 5.4, itu tidak berfungsi karena meneruskan variabel dengan referensi. Contoh fungsi pengindeksan kembali adalah seperti ini menggunakan
use
penutupan kata kunci:sumber
Inilah implementasi saya sendiri. Kunci dalam array input akan dinomori ulang dengan penambahan kunci mulai dari $ start_index.
sumber
Cukup lakukan ini:
sumber
Anda dapat dengan mudah melakukannya setelah menggunakan fungsi array_values () dan array_filter () bersama-sama untuk menghapus elemen array kosong dan pengindeksan kembali dari array dalam PHP.
fungsi array_filter () Fungsi PHP array_filter () menghapus elemen atau nilai array kosong dari array di PHP. Ini juga akan menghapus nilai kosong, nol, salah, 0 (nol).
function array_values () Fungsi PHP array_values () mengembalikan array yang berisi semua nilai array. Array yang dikembalikan akan memiliki kunci numerik, mulai dari 0 dan meningkat sebesar 1.
Hapus Elemen Array Kosong dan Reindex
Pertama mari kita lihat output array $ stack:
Keluaran:
Dalam output di atas kami ingin menghapus nilai kosong, nol, 0 (nol) dan kemudian memasukkan kembali elemen array. Sekarang kita akan menggunakan fungsi array_values () dan array_filter () bersama-sama seperti dalam contoh di bawah ini:
Keluaran:
sumber
array_filter()
tampaknya sama sekali tidak relevan dengan data sampel OP.Penghapusan duplikat dan indeks ulang array:
sumber
array_filter()
tampaknya sama sekali tidak relevan dengan data sampel OP.Cara tercepat yang bisa saya pikirkan
Dan jika Anda hanya ingin mengindeks ulang array (mulai dari nol) dan Anda memiliki PHP +7.3 Anda dapat melakukannya dengan cara ini
Saya percaya
array_unshift
lebih baik daripadaarray_values
yang pertama tidak membuat salinan array.sumber
Rasanya semua
array_combine()
jawaban menyalin semua "kesalahan" yang sama (panggilan yang tidak perluarray_values()
).array_combine()
mengabaikan kunci kedua parameter yang diterimanya.Kode: ( Demo )
Keluaran:
sumber
Penyortiran hanyalah semacam () , pengindeksan ulang tampak agak konyol tetapi jika diperlukan ini akan melakukannya. Meski tidak di tempat. Gunakan array_walk () jika Anda akan melakukan ini di banyak tempat, cukup gunakan loop for-key-value jika ini adalah operasi satu kali.
sumber
Jika OK untuk membuat array baru, ini dia:
Jika Anda membutuhkan pembalikan di tempat, Anda harus menjalankan mundur sehingga Anda tidak menginjak indeks yang Anda butuhkan:
sumber
array_values()
untuk mendapatkan array berbasis 0 dan kemudian membuat beberapa penyesuaian untuk hasil itu jika array berbasis 1 benar- benar diperlukan.