關聯數組是 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() 函數在關聯數組中搜尋值,如果找到則傳回對應的鍵,如果找不到則傳回 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 迴圈遍歷關聯陣列並手動搜尋特定值。當您需要進行複雜的比較或操作時,這非常有用,因為循環位於數組的同一範圍內,因此您可以存取循環中的所有資料。
$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() 函數可用於過濾陣列並僅傳回通過測試回呼的元素。
$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);
如果性能是您關心的問題之一,您肯定會發現本文的這一部分很有趣。
我製作了一個腳本,使用 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%。
但是這個結果可能會根據情境環境而產生很大的變化。如果您在上面連結的沙箱中執行程式碼片段,您會發現 foreach 的效率比 array_map 高 10 倍。您可以將腳本複製到本機環境並為自己做一些基準測試。
無論如何,foreach 通常比 array_map 更有效率的原因是因為它並不意味著使用回調。呼叫函數比在同一作用域中直接使用陣列有更多的開銷。因此,array_map 在每次迭代時都會浪費更多時間。但它僅對較大的數據集可見。數組越小,差距就越微不足道。
Inspector是專為軟體開發人員設計的程式碼執行監控工具。您無需在伺服器層級安裝任何內容,只需安裝 composer 軟體包 即可開始使用。
與其他複雜的一體化平台不同,Inspector 非常簡單,並且對 PHP 友好。您可以嘗試我們的 Laravel 或 Symfony 套件。
如果您正在尋找有效的自動化、深入的見解以及將警報和通知轉發到您的訊息傳遞環境的能力,請免費嘗試 Inspector。註冊您的帳戶。
或在網站上了解更多:https://inspector.dev
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3