如何在 PHP 關聯數組中搜尋 – 快速提示

WBOY
發布: 2024-08-15 18:32:37
原創
800 人瀏覽過

關聯數組是 PHP 中的基本資料結構,允許開發人員儲存鍵值對。它們用途廣泛,通常用於表示結構化資料。在 PHP 關聯數組中搜尋特定元素是一項常見任務。但 PHP 中可用的最原生函數可以很好地處理簡單的陣列。

出於這個原因,我們經常必須找到允許我們在關聯數組上執行相同操作的函數組合。可能沒有記憶體不足錯誤? .

在本教程中,我們將探索在 PHP 關聯數組中搜尋值的各種方法和技術。

在關聯數組中搜尋鍵

array_key_exists() 函數檢查關聯數組中是否存在特定鍵。如果找到密鑰則傳回 true,否則傳回 false。

$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.";
}
登入後複製

按關聯數組中的值搜尋

使用 array_search() 和 in_array()

array_search() 函數在關聯數組中搜尋值,如果找到則傳回對應的鍵,如果找不到則傳回 false。

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

echo array_search('yellow', $colors); // Print "banana"
登入後複製

您也可以使用具有更複雜資料的陣列作為值:

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

echo array_search(['red'], $colors); // Print "apple"
登入後複製

這種情況我建議你使用嚴格比較模式。可以請求將第三個布林參數傳遞給 array_search:

echo array_search(['red'], $colors, true);
登入後複製

與 array_search() 類似的是 in_array 函數,它只會傳回一個布林標誌而不是項目的鍵。

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

使用 foreach 循環

您可以使用 foreach 迴圈遍歷關聯陣列並手動搜尋特定值。當您需要進行複雜的比較或操作時,這非常有用,因為循環位於數組的同一範圍內,因此您可以存取循環中的所有資料。

$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.
    }
}
登入後複製

使用 array_filter()

array_filter() 函數可用於過濾陣列並僅傳回通過測試回呼的元素。

$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);
登入後複製

PHP 陣列函數與 foreach 之間的效能基準

如果效能是您關心的問題之一,您肯定會發現本文的這一部分很有趣。

我製作了一個腳本,使用 array_map 和 foreach 迴圈對包含 200,000 個項目的陣列執行簡單操作。我使用 Inspector 套件來追蹤這兩個語句的效能。您可以使用此沙箱中的程式碼: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');
登入後複製

數十次執行顯示 foreach 總是比 array_map 好約 10%。

How to Search in a PHP Associative Array – Fast tips

但是這個結果可能會根據情境環境而產生很大的變化。如果您在上面連結的沙箱中執行程式碼片段,您會發現 foreach 的效率比 array_map 高 10 倍。您可以將腳本複製到本機環境並為自己做一些基準測試。

無論如何,foreach 通常比 array_map 更有效率的原因是因為它並不意味著使用回調。呼叫函數比在同一範圍內直接使用陣列有更多的開銷。因此,array_map 在每次迭代時都會浪費更多時間。但它僅對較大的數據集可見。數組越小,差距就越微不足道。

督察新人?免費監控您的應用程式

Inspector是一款專為軟體開發人員設計的程式碼執行監控工具。您不需要在伺服器層級安裝任何內容,只需安裝 composer 套件 就可以開始了。

與其他複雜的一體化平台不同,Inspector 非常簡單,並且對 PHP 友善。您可以嘗試我們的 Laravel 或 Symfony 套件。

如果您正在尋找有效的自動化、深入的見解以及將警報和通知轉發到訊息傳遞環境的能力,請免費嘗試 Inspector。註冊您的帳戶。

或在網站上了解更多:https://inspector.dev

How to Search in a PHP Associative Array – Fast tips

以上是如何在 PHP 關聯數組中搜尋 – 快速提示的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板