Saya memiliki array multidimensi ini. Saya perlu mencarinya dan hanya mengembalikan kunci yang cocok dengan nilai "siput". Saya tahu ada utas lain tentang mencari array multidimensi, tetapi saya tidak benar-benar cukup memahami untuk diterapkan pada situasi saya. Terima kasih banyak atas bantuannya!
Jadi saya butuh fungsi seperti:
myfunction($products,'breville-one-touch-tea-maker-BTM800XL');
// returns 1
Inilah Array:
$products = array (
1 => array(
'name' => 'The Breville One-Touch Tea Maker',
'slug' => 'breville-one-touch-tea-maker-BTM800XL',
'shortname' => 'The One-Touch Tea Maker',
'listprice' => '299.99',
'price' => '249.99',
'rating' => '9.5',
'reviews' => '81',
'buyurl' => 'http://www.amazon.com/The-Breville-One-Touch-Tea-Maker/dp/B003LNOPSG',
'videoref1' => 'xNb-FOTJY1c',
'videoref2' => 'WAyk-O2B6F8',
'image' => '812BpgHhjBML.jpg',
'related1' => '2',
'related2' => '3',
'related3' => '4',
'bestbuy' => '1',
'quote' => '',
'quoteautor' => 'K. Martino',
),
2 => array(
'name' => 'Breville Variable-Temperature Kettle BKE820XL',
'slug' => 'breville-variable-temperature-kettle-BKE820XL',
'shortname' => 'Variable Temperature Kettle',
'listprice' => '199.99',
'price' => '129.99',
'rating' => '9',
'reviews' => '78',
'buyurl' => 'http://www.amazon.com/Breville-BKE820XL-Variable-Temperature-1-8-Liter-Kettle/dp/B001DYERBK',
'videoref1' => 'oyZWBD83xeE',
'image' => '41y2B8jSKmwL.jpg',
'related1' => '3',
'related2' => '4',
'related3' => '5',
'bestbuy' => '1',
'quote' => '',
'quoteautor' => '',
),
);
php
search
multidimensional-array
key
Ben Kouba
sumber
sumber
if (myfunction($array, 'field', 'value') !== FALSE )) // do something...
Solusi lain yang mungkin didasarkan pada
array_search()
fungsinya. Anda perlu menggunakan PHP 5.5.0 atau lebih tinggi.Contoh
Penjelasan
Fungsi tersebut
array_search()
memiliki dua argumen. Yang pertama adalah nilai yang ingin Anda cari. Yang kedua adalah di mana fungsi harus mencari. Fungsiarray_column()
mendapatkan nilai dari elemen yang merupakan kuncinya'uid'
.Ringkasan
Jadi Anda bisa menggunakannya sebagai:
atau, jika Anda lebih suka:
Contoh asli (oleh xfoxawy) dapat ditemukan di DOCS .
The
array_column()
halaman .Memperbarui
Karena komentar Vael saya penasaran, jadi saya membuat tes sederhana untuk meyakinkan kinerja metode yang digunakan
array_search
dan metode yang diusulkan pada jawaban yang diterima.Saya membuat array yang berisi 1000 array, strukturnya seperti ini (semua data diacak):
Saya menjalankan tes pencarian 100 kali mencari nilai yang berbeda untuk bidang nama, dan kemudian saya menghitung waktu rata-rata dalam milidetik . Di sini Anda bisa melihat contohnya.
Hasilnya adalah bahwa metode yang diajukan pada jawaban ini membutuhkan sekitar 2E-7 untuk menemukan nilainya, sedangkan metode jawaban yang diterima membutuhkan sekitar 8E-7.
Seperti yang saya katakan sebelumnya, kedua waktu cukup dapat diterima untuk aplikasi yang menggunakan array dengan ukuran ini. Jika ukurannya bertambah banyak, katakanlah 1 juta elemen, maka perbedaan kecil ini juga akan bertambah.
Perbarui II
Saya telah menambahkan tes untuk metode berdasarkan
array_walk_recursive
yang disebutkan di beberapa jawaban di sini. Hasil yang didapat adalah yang benar. Dan jika kita fokus pada kinerja, itu sedikit lebih buruk daripada yang diperiksa dalam tes . Dalam pengujian, Anda dapat melihat bahwa sekitar 10 kali lebih lambat daripada metode yang didasarkanarray_search
. Sekali lagi, ini bukan perbedaan yang sangat relevan untuk sebagian besar aplikasi.Perbarui III
Terima kasih kepada @mickmackusa karena telah menemukan beberapa batasan pada metode ini:
sumber
array_search()
denganarray_column()
tidak akan berfungsi pada larik sampel OP karena kunci sub larik dimulai dari1
. Metode ini juga akan gagal pada kunci asosiatif. Metode ini hanya akan bekerja pada subarray yang diindeks (mulai dari0
dan memiliki kunci naik secara berurutan). Alasannya adalah karenaarray_column()
akan menghasilkan indeks baru dalam array yang dikembalikan.Metode kelas ini dapat mencari dalam array dengan beberapa kondisi:
Akan menghasilkan:
sumber
Gunakan fungsi ini:
dan fungsi panggilan.
sumber
sumber
Untuk pengunjung berikutnya yang datang: gunakan deret rekursif; itu mengunjungi setiap "daun" dalam array multidimensi. Ini untuk inspirasi:
sumber
Saya akan melakukan seperti di bawah ini, di mana
$products
array sebenarnya diberikan dalam masalah di awal.sumber
Coba ini
sumber
&&
dan||
daripadaAND
danOR
dalam kondisi Anda. Tidak ada alasan untuk menyatakancurrent_key
. Perbandingan$needle
harus ketat.