Anehnya array_keys_exist
tidak ada ?! Untuk sementara yang menyisakan ruang untuk mencari ekspresi baris tunggal untuk tugas umum ini. Saya sedang memikirkan skrip shell atau program kecil lainnya.
Catatan: setiap solusi berikut menggunakan […]
sintaks deklarasi larik ringkas yang tersedia di php 5.4+
if (0 === count(array_diff(['story', 'message', '…'], array_keys($source)))) {
} else {
}
(tip topi untuk Kim Stacks )
Pendekatan ini adalah yang paling singkat yang saya temukan. array_diff()
mengembalikan larik item yang ada dalam argumen 1 tidak ada dalam argumen2. Oleh karena itu, array kosong menunjukkan semua kunci ditemukan. Di php 5.5 Anda bisa menyederhanakan 0 === count(…)
menjadi sederhana empty(…)
.
if (0 === count(array_reduce(array_keys($source),
function($in, $key){ unset($in[array_search($key, $in)]); return $in; },
['story', 'message', '…'])))
{
} else {
}
Lebih sulit dibaca, mudah diubah. array_reduce()
menggunakan callback untuk mengulangi larik untuk mendapatkan nilai. Dengan memberi makan kunci yang kita minati $initial
nilainya $in
dan kemudian menghapus kunci yang ditemukan di source, kita dapat berharap untuk mengakhiri dengan 0 elemen jika semua kunci ditemukan.
Konstruksinya mudah dimodifikasi karena tombol yang kami minati pas dengan baik.
if (2 === count(array_filter(array_keys($source), function($key) {
return in_array($key, ['story', 'message']); }
)))
{
} else {
}
Lebih sederhana untuk menulis daripada array_reduce
solusinya tetapi sedikit lebih sulit untuk diedit. array_filter
juga merupakan callback berulang yang memungkinkan Anda membuat array yang difilter dengan mengembalikan true (salin item ke array baru) atau false (jangan salin) di callback. Gotchya adalah Anda harus mengubah 2
jumlah item yang Anda harapkan.
Ini dapat dibuat lebih tahan lama tetapi hampir pada keterbacaan yang tidak masuk akal:
$find = ['story', 'message'];
if (count($find) === count(array_filter(array_keys($source), function($key) use ($find) { return in_array($key, $find); })))
{
} else {
}