Saya memiliki larik tempat saya ingin mencari uid
dan mendapatkan kunci array.
Contohnya
Asumsikan kita memiliki array 2 dimensi berikut:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
Panggilan fungsi search_by_uid(100)
(pengguna pertama) harus kembali 0
.
Panggilan fungsi search_by_uid(40489)
harus kembali 2
.
Saya mencoba membuat loop, tetapi saya ingin kode eksekusi lebih cepat.
php
arrays
multidimensional-array
Rachit
sumber
sumber
array_column
jawaban satu-liner. Saya memodifikasi semuanya untuk mengembalikan array yang ditemukan sebenarnya, bukan hanya kuncinya, karena biasanya itulah use case saya. Metode fungsi mencetak 0,361, cari-col 0,184 dan kunci-col 0,189 rata-rata penundaan mikro lebih dari 1000 berjalan untuk setiap metode.Jawaban:
Ini akan bekerja Anda harus menyebutnya seperti ini:
Penting untuk diketahui bahwa jika Anda menggunakan
===
jenis yang dibandingkan operator harus persis sama, dalam contoh ini Anda harus mencaristring
atau hanya menggunakan==
saja===
.Berdasarkan jawaban angoru . Di versi PHP yang lebih baru (
>= 5.5.0
) Anda bisa menggunakan satu-liner.Berikut adalah dokumentasi: http://php.net/manual/en/function.array-column.php .
sumber
array_column($userdb, 'uid')
denganarray_map(function($v){return $v['uid'];},$userdb)
array_search
, bukan?foreach
loop) akan bekerja lebih cepat karena berhenti segera setelah kecocokan ditemukan. Solusi yang lebih baru harus mengulangi seluruh array sekali untuk mengekstrakarray_column
, lalu mengulanginya untuk kedua kalinya untuk melakukan pencarian (sampai menemukan kecocokan). Solusi yang lebih baru lebih mudah dibaca, lebih ringkas, tetapi OP secara khusus mengangkat kinerja sebagai masalahJika Anda menggunakan (PHP 5> = 5.5.0) Anda tidak perlu menulis fungsi Anda sendiri untuk melakukan ini, cukup tulis baris ini dan selesai.
Jika Anda ingin satu hasil saja:
Untuk banyak hasil
Jika Anda memiliki array asosiatif seperti yang ditunjukkan dalam komentar, Anda dapat membuatnya dengan:
Jika Anda menggunakan PHP <5.5.0, Anda dapat menggunakan backport ini , terima kasih ramsey!
Pembaruan: Saya telah membuat beberapa tolok ukur sederhana dan bentuk beberapa hasil tampaknya menjadi yang tercepat, bahkan lebih cepat daripada fungsi kustom Jakub!
sumber
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
Dalam versi PHP yang lebih baru (> = 5.5.0) Anda dapat menggunakan satu-baris ini:
sumber
Membangun jawaban yang sangat baik dari Jakub , berikut ini adalah pencarian yang lebih umum yang akan memungkinkan kunci untuk ditentukan (tidak hanya untuk uid):
Pemakaian:
$results = searcharray('searchvalue', searchkey, $array);
sumber
Saya tahu ini sudah dijawab, tetapi saya menggunakan ini dan menambahkannya sedikit lebih dalam kode saya sehingga Anda tidak hanya mencari dengan uid. Saya hanya ingin membaginya untuk orang lain yang mungkin membutuhkan fungsi itu.
Inilah contoh saya dan harap diingat ini adalah jawaban pertama saya. Saya mengambil array param karena saya hanya perlu mencari satu array spesifik, tetapi Anda dapat dengan mudah menambahkannya. Saya ingin dasarnya mencari lebih dari sekedar uid.
Juga, dalam situasi saya mungkin ada beberapa kunci untuk kembali sebagai hasil pencarian oleh bidang lain yang mungkin tidak unik.
Kemudian, saya akhirnya menulis ini untuk memungkinkan saya mencari nilai lain dan kunci asosiatif. Jadi contoh pertama saya memungkinkan Anda untuk mencari nilai dalam kunci asosiatif tertentu, dan mengembalikan semua kecocokan.
Contoh kedua ini menunjukkan kepada Anda di mana nilai ('Taylor') ditemukan di kunci asosiatif tertentu (nama depan) DAN nilai lain (benar) ditemukan di kunci asosiatif lain (dipekerjakan), dan mengembalikan semua kecocokan (Kunci di mana orang dengan nama depan 'Taylor' DAN dipekerjakan).
Penggunaan fungsi
Hasil
sumber
Terlihat array_filter akan menjadi solusi yang cocok untuk ini ...
Kode PHP
sumber
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
Saya memodifikasi salah satu contoh di bawah ini deskripsi fungsi array_search . Fungsi
searchItemsByKey
mengembalikan semua nilai dengan $ key dari array multidimensi (level N). Mungkin, itu akan bermanfaat bagi seseorang. Contoh:Kode fungsi:
sumber
Berikut ini satu liner untuk hal yang sama,
sumber
Meskipun ini adalah pertanyaan lama dan memiliki jawaban yang diterima, saya pikir saya akan menyarankan satu perubahan pada jawaban yang diterima .. Jadi pertama-tama, saya setuju bahwa jawaban yang diterima benar di sini.
Mengganti preset 'uid' dengan parameter dalam fungsi sebagai gantinya, jadi sekarang memanggil kode di bawah ini berarti Anda dapat menggunakan satu fungsi di beberapa jenis array. Perubahan kecil, tetapi satu yang membuat sedikit perbedaan.
Contoh Fiddle PHP
sumber
null
dan kemudian dalam kode, Anda membandingkannyafalse
.Saya ingin memeriksa tha dalam array berikut
$arr
apakah ada 'abc' ada di sub array atau tidakMaka saya bisa menggunakan ini
Saya pikir Ini adalah cara paling sederhana untuk mendefinisikan
sumber
Saya harus menggunakan fungsi un yang menemukan setiap elemen dalam array. Jadi saya memodifikasi fungsi yang dilakukan oleh Jakub Truneček sebagai berikut:
sumber
sumber
Anda dapat menggunakan fungsi ini; https://github.com/serhatozles/ArrayAdvancedSearch
sumber
sumber
Coba ini
sumber
Bagikan saja, mungkin bisa seperti ini.
sumber
Coba ini juga
sumber
Dengan bantuan kode di atas, seseorang dapat menemukan data (sebagian cocok) dari kolom apa pun dalam array 2D sehingga id pengguna dapat ditemukan seperti yang dipersyaratkan dalam pertanyaan.
sumber
Memperluas fungsi @mayhem dibuat, contoh ini akan lebih dari pencarian "fuzzy" jika Anda hanya ingin mencocokkan bagian ( sebagian besar ) dari string pencarian:
Misalnya nilai dalam array adalah Welcome to New York! dan Anda ingin contoh pertama dari "New York!"
sumber
sumber
Jika pertanyaan yaitu
Jawab:
sumber
solusi saya:
sumber