Array terlihat seperti:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
Dan saya memiliki variabel integer yang disebut $v
.
Bagaimana saya bisa memilih entri array yang memiliki objek di mana ID
properti memiliki $v
nilai?
isset($item)
tetapi saya lebih suka menginisialisasi variabel dengan benarif($v == $struct["ID"]){...
YurkamTim benar. Hanya perlu modifikasi:
Setelah fungsi ($) Anda perlu pointer ke variabel eksternal dengan "gunakan (& $ searchValue)" dan kemudian Anda dapat mengakses variabel eksternal. Anda juga dapat memodifikasinya.
sumber
&
diperlukan saat mengimpor$searchedValue
ke dalam ruang lingkup penutupan. Ini&
digunakan untuk membuat referensi yang hanya diperlukan jika$searchedValue
telah dimodifikasi di dalam penutupan.global
adalah satu-satunya untuk berbagi data dalam fungsi! Namun sangat disayangkan jika ini memang lambat. :(sumber
Saya telah menemukan solusi yang lebih elegan di sini . Diadaptasi untuk pertanyaan yang mungkin terlihat seperti:
sumber
array_filter
mengembalikan array, dan tidak akan berhenti pada nilai pertama yang ditemukan.$searchedValue
di dalam fungsi. Tapi di luar itu.$searchedValue
berada di luar cakupan penutupan. Kedua, bagaimana menurut Anda metode array ini bekerja? Mereka semua mengulang array secara internal$searchedValue
perlu menulisfunction ($e) use ($searchedValue) {
Menggunakan array_column untuk mengindeks ulang akan menghemat waktu jika Anda perlu menemukan beberapa kali:
Maka Anda bisa
$lookup[$id]
sesuka hati.sumber
Menggunakannya seperti yang Anda inginkan akan menjadi seperti:
sumber
Mencoba
contoh kerja di sini
sumber
Memperbaiki kesalahan kecil dariYurkaTim , solusi Anda berfungsi untuk saya tetapi menambahkan
use
:Untuk menggunakannya
$searchedValue
, di dalam fungsi, satu solusi bisause ($searchedValue)
setelah parameter fungsifunction ($e) HERE
.satu
array_filter
fungsi hanya kembali pada$neededObject
jika kondisi pada kembali adalahtrue
Jika
$searchedValue
string atau integer:Jika
$searchedValue
array di mana kita perlu memeriksa dengan daftar:sumber
var_dump($neededObject);
:)Saya terkadang suka menggunakan fungsi array_reduce () untuk melakukan pencarian. Ini mirip dengan array_filter () tetapi tidak mempengaruhi array yang dicari, memungkinkan Anda untuk melakukan beberapa pencarian pada array objek yang sama.
sumber
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }
Saya melakukan ini dengan semacam keymap Java. Jika Anda melakukannya, Anda tidak perlu mengulangi array objek Anda setiap waktu.
keluaran:
sumber
Cara untuk langsung mendapatkan nilai pertama:
sumber
Saya memposting apa yang saya gunakan untuk menyelesaikan masalah ini secara efisien di sini menggunakan Algoritma Binary Search cepat: https://stackoverflow.com/a/52786742/1678210
Saya tidak ingin menyalin jawaban yang sama. Orang lain menanyakannya sedikit berbeda tetapi jawabannya sama.
sumber