Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mencari dalam Tatasusunan Bersekutu PHP – Petua pantas

Cara Mencari dalam Tatasusunan Bersekutu PHP – Petua pantas

WBOY
WBOYasal
2024-08-15 18:32:37778semak imbas

Tatasusunan bersekutu ialah struktur data asas dalam PHP, membolehkan pembangun menyimpan pasangan nilai kunci. Ia serba boleh dan biasa digunakan untuk mewakili data berstruktur. Mencari elemen tertentu dalam tatasusunan bersekutu PHP adalah tugas biasa. Tetapi fungsi paling asli yang tersedia dalam PHP berfungsi dengan baik dengan tatasusunan mudah.

Atas sebab ini kita sering perlu mencari gabungan fungsi yang membolehkan kita melakukan perkara yang sama pada tatasusunan bersekutu. Mungkin tanpa ralat di luar ingatan ?.

Dalam tutorial ini, kami akan meneroka pelbagai kaedah dan teknik untuk mencari nilai dalam tatasusunan bersekutu PHP.

Mencari Kunci dalam Tatasusunan Bersekutu

Fungsi array_key_exists() menyemak sama ada kunci tertentu wujud dalam tatasusunan bersekutu. Ia kembali benar jika kunci ditemui dan palsu sebaliknya.

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
];

if (array_key_exists('banana', $fruits)) {
    echo "The key 'banana' exists in the array.";
} else {
    echo "The key 'banana' does not exist in the array.";
}

Mencari mengikut Nilai dalam Tatasusunan Bersekutu

Menggunakan array_search() dan in_array()

Fungsi array_search() mencari nilai dalam tatasusunan bersekutu dan mengembalikan kunci yang sepadan jika ditemui, atau palsu jika tidak ditemui.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

echo array_search('yellow', $colors); // Print "banana"

Anda juga boleh menggunakan tatasusunan dengan data yang lebih kompleks sebagai nilai:

$colors = [
    'apple' => ['red'],
    'banana' => 'yellow',
];

echo array_search(['red'], $colors); // Print "apple"

Dalam kes ini saya cadangkan anda menggunakan mod perbandingan yang ketat. Ia boleh diminta menghantar parameter boolean ketiga ke array_search:

echo array_search(['red'], $colors, true);

Serupa dengan array_search() ialah fungsi in_array yang hanya mengembalikan bendera boolean dan bukannya kunci item.

/*
 * It also supports strict mode comparison, useful for working with structured data as a value.
 */
echo in_array(['red'], $colors, true); // Return "true"

Menggunakan gelung foreach

Anda boleh lelaran melalui tatasusunan bersekutu menggunakan gelung foreach dan mencari nilai tertentu secara manual. Ini berguna apabila anda perlu membuat perbandingan atau manipulasi yang kompleks kerana gelung hidup dalam skop tatasusunan yang sama, jadi anda mempunyai akses kepada semua data dalam gelung.

$targetValue = 'yellow';

foreach ($colors as $key => $value) {
    if ($value === $targetValue) {
        echo "The value {$targetValue} is associated with the key {$key}.";
        break; // Optional: Stop searching after finding the occurrence.
    }
}

Menggunakan array_filter()

Fungsi array_filter() boleh digunakan untuk menapis tatasusunan dan hanya mengembalikan elemen yang lulus panggilan balik ujian.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

$filteredArray = array_filter($colors, function ($value) {
    return $value === 'red';
});

/*
 * It contains just one element: ['apple' => 'red']
 * ‘banana’ was filtered out.
 */
var_dump($filteredArray);

Penanda aras prestasi antara fungsi tatasusunan PHP dan foreach

Jika prestasi adalah salah satu kebimbangan anda, anda pasti akan mendapati bahagian artikel ini menarik.

Saya membuat skrip untuk melaksanakan operasi mudah pada tatasusunan 200,000 item menggunakan array_map dan gelung foreach. Saya menggunakan pakej Inspektor untuk mengesan prestasi kedua-dua pernyataan. Anda boleh bermain dengan kod dalam kotak pasir ini: https://phpsandbox.io/e/x/5titt

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    array_map(fn($item) => $item * 3, $data);
}, 'array_map');

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    foreach ($data as $item) {
        $data[$item] = $item * 3;
    }
}, 'foreach');

Berpuluh-puluh pelaksanaan menunjukkan bahawa foreach secara konsisten lebih baik daripada array_map sebanyak lebih kurang 10%.

How to Search in a PHP Associative Array – Fast tips

Tetapi keputusan ini boleh banyak berubah berdasarkan persekitaran kontekstual. Jika anda menjalankan coretan dalam kotak pasir yang dipautkan di atas, anda akan mengetahui bahawa foreach adalah 10x lebih cekap daripada array_map. Anda boleh menyalin skrip dalam persekitaran setempat anda dan membuat beberapa penanda aras untuk diri sendiri.

Bagaimanapun, sebab foreach secara amnya lebih cekap daripada array_map adalah kerana ia tidak membayangkan penggunaan panggilan balik. Terdapat lebih banyak overhed dalam menggunakan fungsi daripada menggunakan tatasusunan secara langsung dalam skop yang sama. Atas sebab ini array_map membuang lebih sedikit masa dengan setiap lelaran. Tetapi ia hanya kelihatan untuk set data yang lebih besar. Lebih kecil tatasusunan semakin tidak ketara jurangnya.

Baru Kepada Inspektor? Pantau aplikasi anda secara percuma

Inspektor ialah alat Pemantauan Pelaksanaan Kod yang direka khusus untuk pembangun perisian. Anda tidak perlu memasang apa-apa di peringkat pelayan, cuma pasang pakej komposer dan anda sudah bersedia untuk pergi.

Tidak seperti platform lain yang kompleks, semua-dalam-satu, Inspektor sangat mudah dan mesra PHP. Anda boleh mencuba pakej Laravel atau Symfony kami.

Jika anda mencari automasi yang berkesan, cerapan mendalam dan keupayaan untuk memajukan makluman dan pemberitahuan ke dalam persekitaran pemesejan anda cuba Inspektor secara percuma. Daftar akaun anda.

Atau ketahui lebih lanjut di tapak web: https://inspector.dev

How to Search in a PHP Associative Array – Fast tips

Atas ialah kandungan terperinci Cara Mencari dalam Tatasusunan Bersekutu PHP – Petua pantas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn