Saya memiliki array asosiatif dan saya perlu menemukan posisi numerik kunci. Saya bisa mengulang-ulang array secara manual untuk menemukannya, tetapi apakah ada cara yang lebih baik untuk membangun PHP?
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
array("val1", "val2", "car" => "val3")
akan menghasilkan0
, yang salah ...http://php.net/manual/en/function.array-keys.php
sumber
sumber
sumber
Sementara jawaban Fosco tidak salah, ada kasus yang harus dipertimbangkan dengan yang ini: array campuran. Bayangkan saya memiliki array seperti ini:
Sekarang, PHP memperbolehkan sintaksis semacam ini tetapi memiliki satu masalah: jika saya menjalankan kode Fosco saya mendapatkan
0
yang salah , tetapi mengapa ini terjadi?Karena ketika melakukan perbandingan antara string dan integer PHP mengubah string ke integer (dan ini agak bodoh menurut saya), jadi ketika
array_search()
mencari indeks, ia berhenti pada yang pertama karena tampaknya("car" == 0)
benar .Menyetel
array_search()
ke mode ketat tidak akan menyelesaikan masalah karenaarray_search("0", array_keys($a))
akan mengembalikan false meskipun ada elemen dengan indeks 0.Jadi solusi saya hanya mengonversi semua indeks dari
array_keys()
ke string dan kemudian membandingkannya dengan benar:Cetakan
1
, mana yang benar.EDIT:
Seperti yang Shaun tunjukkan dalam komentar di bawah, hal yang sama berlaku untuk nilai indeks, jika Anda mencari indeks int seperti ini:
Anda akan selalu mendapatkan
0
, yang salah, jadi solusinya adalah dengan melemparkan indeks (jika Anda menggunakan variabel) ke string seperti ini:sumber
var_dump(array_search(0, array_map("strval", array_keys($a))));
akan selalu menghasilkanint (0)
, bukanbool (false)
.solusi saya datang dengan ... mungkin cukup tidak efisien dibandingkan dengan solusi Fosco:
sumber
array_search
, yang melakukan penyortiran pertama dan karenanya sangat lambat.Semua solusi berdasarkan array_keys tidak berfungsi untuk array campuran. Solusinya sederhana:
Dari php.net: Jika parameter ketiga ketat diatur ke TRUE maka fungsi array_search () akan mencari elemen identik di tumpukan jerami. Ini berarti ia juga akan melakukan perbandingan jenis jarum yang ketat di tumpukan jerami, dan benda-benda harus merupakan contoh yang sama.
sumber