Saya gunakan in_array()
untuk memeriksa apakah ada nilai dalam array seperti di bawah ini,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
tapi bagaimana dengan array multidimensi (di bawah) - bagaimana saya bisa memeriksa nilai itu apakah ada di multi-array?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
atau saya tidak boleh menggunakan in_array()
ketika datang ke array multidimensi?
php
arrays
multidimensional-array
laukok
sumber
sumber
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0);
$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux"));
$tmp
adalah array denganis_array()
fungsi. Jika bukan array - lanjutkan dengan skenario yang berbeda.Jawaban:
in_array()
tidak bekerja pada array multidimensi. Anda bisa menulis fungsi rekursif untuk melakukannya untuk Anda:Pemakaian:
sumber
_r
, analog denganprint_r()
, misalnya). Itu turun ke semua array bersarang untuk mencari nilai sampai tidak ada lagi array yang ditemukan. Dengan cara ini, Anda dapat mencari melalui array kompleksitas sewenang-wenang, bukan hanya dua level.Jika Anda tahu kolom mana yang harus dicari, Anda dapat menggunakan array_search () dan array_column ():
Ide ini ada di bagian komentar untuk array_search () pada manual PHP;
sumber
array_column
Ini juga akan berhasil.
Pemakaian:
sumber
foreach
loop.$array
yang memiliki kunci asosiatif yang cocok$item
. Belum lagi potensi untuk secara tidak sengaja mencocokkan bagian dari string ketika ada kutipan ganda dalam string itu sendiri. Saya hanya akan mempercayai fungsi ini dalam situasi kecil / sederhana seperti pertanyaan ini.$item
berisi karakter yang mengacaukan parameter pertama (ekspresi reguler) daripreg_match
Ini akan melakukannya:
in_array
hanya beroperasi pada array satu dimensi, jadi Anda harus mengulang setiap sub array dan menjalankannyain_array
masing-masing.Seperti yang telah dicatat orang lain, ini hanya untuk array 2 dimensi. Jika Anda memiliki lebih banyak array bersarang, versi rekursif akan lebih baik. Lihat jawaban lain untuk contohnya.
sumber
)
hilang di akhir baris yang disebutkan.in_array()
dengan parameter ketiga diatur ketrue
. Lihat di sini alasannya: stackoverflow.com/questions/37080581/…jika array Anda seperti ini
Gunakan ini
contoh:
echo in_multiarray("22", $array,"Age");
sumber
sumber
array_column()
Fungsi hebat, tetapi tidak berhasil bagi saya sampai saya menambahkan
if($found) { break; }
keelseif
sumber
Untuk Anak Multidimensi:
in_array('needle', array_column($arr, 'key'))
Untuk Anak Satu Dimensi:
in_array('needle', call_user_func_array('array_merge', $arr))
sumber
array_column()
metode ini,call_user_func_array('array_merge')
metode ini juga berfungsi dengan array anak berbasis indeks, +1Anda selalu bisa membuat serial array multi-dimensi Anda dan melakukan
strpos
:Berbagai dokumen untuk hal-hal yang saya gunakan:
sumber
Karena PHP 5.6 ada solusi yang lebih baik dan lebih bersih untuk jawaban aslinya:
Dengan array multidimensi seperti ini:
Kita dapat menggunakan operator percikan :
Jika Anda memiliki kunci string seperti ini:
Anda harus menggunakan
array_values
untuk menghindari kesalahanCannot unpack array with string keys
:sumber
The diterima solusi (pada saat menulis) oleh jwueller
Sangat benar tetapi mungkin memiliki perilaku yang tidak diinginkan ketika melakukan perbandingan lemah (parameter
$strict = false
).Karena jenis juggling PHP ketika membandingkan nilai-nilai dari tipe yang berbeda keduanya
dan
Mengevaluasi
true
karena"example"
dicor keint
dan diubah menjadi0
.(Lihat Mengapa PHP menganggap 0 sama dengan string? )
Jika ini bukan perilaku yang diinginkan , akan lebih mudah untuk memberikan nilai numerik ke string sebelum melakukan perbandingan yang tidak ketat:
sumber
Ini adalah fungsi pertama dari jenis ini yang saya temukan di manual php untuk in_array . Fungsi di bagian komentar tidak selalu yang terbaik tetapi jika tidak melakukan trik Anda dapat melihat di sana juga :)
sumber
Berikut adalah proposisi saya berdasarkan solusi json_encode () dengan:
Jika kata tidak ditemukan, itu masih mengembalikan 0 sama dengan false .
Semoga ini bisa membantu.
sumber
00
into10000
ataulo
intoHello
. Selanjutnya akan gagal adalah jarum berisi karakter apa pun yangjson_encode
lolos , seperti tanda kutip ganda.Saya yakin Anda bisa menggunakan array_key_exists saat ini:
sumber
Saya sedang mencari fungsi yang akan membiarkan saya mencari string dan array (sebagai jarum) dalam array (tumpukan jerami), jadi saya menambahkan jawaban oleh @jwueller .
Ini kode saya:
sumber
Ini berfungsi juga membuat pertama Array unidimensional baru dari yang asli.
sumber
Versi lebih pendek, untuk array multidimensi dibuat berdasarkan set hasil basis data.
Akan kembali jika array $ os_list berisi 'XP' di bidang os_version.
sumber
Saya menemukan solusi sederhana yang sangat kecil:
Jika array Anda adalah:
maka kodenya akan seperti:
sumber
Saya menggunakan metode ini berfungsi untuk sejumlah bersarang dan tidak memerlukan peretasan
sumber
Silakan coba:
Saya tidak yakin tentang kebutuhan, tetapi ini mungkin cocok untuk kebutuhan Anda
sumber
$b
Kunci array hanya bilangan bulat ... tidak ada kunci yang ditentukan dalam array ini ... danarray_keys($b["irix"])
hanya akan melempar kesalahan, karena$b["irix"]
tidak ada.bagaimana dengan array_search? tampaknya itu lebih cepat daripada pendahuluan menurut https://gist.github.com/Ocramius/1290076 ..
sumber
Anda bisa menggunakan seperti ini
http://php.net/manual/tr/function.array-intersect.php
sumber