」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 PHP 關聯數組中搜尋 – 快速提示

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

發佈於2024-11-07
瀏覽:760

關聯數組是 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

版本聲明 本文轉載於:https://dev.to/inspector/how-to-search-in-a-php-associative-array-fast-tips-26o6?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼 json_encode() 無法使用 Latin1 編碼對 MySQL 資料庫中的重音字元進行編碼?
    為什麼 json_encode() 無法使用 Latin1 編碼對 MySQL 資料庫中的重音字元進行編碼?
    MySQL 中UTF-8 字元的JSON 編碼難題當嘗試使用latin1_swedish_ci 編碼從資料庫中檢索重音字元並使用json_encode() 將它們編碼為JSON 時,結果可能出乎意料。預期結果(例如“Abord â Plouffe”)會轉換為“null”,從而使編碼的 JSON 無效...
    程式設計 發佈於2024-11-07
  • 如何在 MySQL 中將行轉置為列:綜合指南
    如何在 MySQL 中將行轉置為列:綜合指南
    在MySQL 中將行轉換為列在MySQL 中將行轉換為列在MySQL 查詢中將行轉換為列需要在應用程式中執行複雜的查詢或手動操作。 GROUP_CONCAT 解雖然 GROUP_CONCAT 可以將行轉換為單列,但它不提供整個結果集所需的轉置。 手動查詢方法對於更複雜的轉置,需要細緻的查詢,從原始行...
    程式設計 發佈於2024-11-07
  • 如何解決iOS後台模式下未收到GCM通知的問題
    如何解決iOS後台模式下未收到GCM通知的問題
    當應用程式在iOS 上處於後台模式時未收到GCM 通知當iOS 在後台收到通知但不處理時,會出現此問題它們在使用者介面中。若要解決此問題,請確保您的應用程式:啟用後台推播通知:檢查您的應用程式是否已要求並取得在背景接收推播通知的權限。 設定徽章應用程式圖示:驗證是否在應用程式的「設定」>「通知」部分...
    程式設計 發佈於2024-11-07
  • 為什麼在 Windows 7 中使用 CLASSPATH 時出現 ClassNotFoundException?
    為什麼在 Windows 7 中使用 CLASSPATH 時出現 ClassNotFoundException?
    儘管使用CLASSPATH 環境變數仍解決java.lang.ClassNotFoundException在Windows 7 中嘗試使用Java 連線至MySQL 資料庫時,設定CLASSPATH 環境變數以包含JDBC 驅動程式jar 檔案的路徑似乎無法解決java.lang.ClassNotF...
    程式設計 發佈於2024-11-07
  • 開發人員需要了解免費外匯 API
    開發人員需要了解免費外匯 API
    如果您是一名开发人员,您一定正在寻找可以帮助您更轻松地工作的工具,对吗?免费的外汇 API 就是其中之一!它使您无需支付任何费用即可获取外汇汇率。但是,许多开发人员对这些 API 不太了解。因此,本文旨在解释什么是免费外汇 API、它为何有用以及如何为您的项目选择一个 API。 什么是免费外汇 A...
    程式設計 發佈於2024-11-07
  • 如何使用 JavaScript 將字串中每個單字的首字母大寫?
    如何使用 JavaScript 將字串中每個單字的首字母大寫?
    使用JavaScript 將字串中每個單字的首字母大寫在JavaScript 中,將字串中每個單字的首字母大寫可以透過多種方法來實現。一種常見的方法是使用將給定字串轉換為標題大小寫的函數。 讓我們探索一個示範此技術的程式碼範例:function titleCase(str) { var spli...
    程式設計 發佈於2024-11-07
  • 我們能否在 JavaScript 中實現超越「setTimeout()」的可靠計時器精度?
    我們能否在 JavaScript 中實現超越「setTimeout()」的可靠計時器精度?
    在Javascript 中實現超越setTimeout() 的計時器精度Javascript 的setTimeout() 方法在精度方面經常達不到要求,表現出不可預測的延遲,可能會影響UI 操作。因此,開發人員可能想知道是否有其他方法可以提供更可靠的計時功能。 使用 setTimeout() 獲得精...
    程式設計 發佈於2024-11-07
  • 使用 Amazon Q Transformation 將 Java 頌歌轉換為 Java
    使用 Amazon Q Transformation 將 Java 頌歌轉換為 Java
    近年来,Java 取得了显着的进步,每个新版本都引入了强大的功能和优化。如果您仍在 Java 8 上运行,您就会错过性能、语法和安全性方面的重大改进。从 Java 8 升级到 Java 17 似乎令人畏惧,但 Amazon Q 的转换功能通过自动化一些较繁琐的步骤使升级变得更加容易。在这篇文章中,我...
    程式設計 發佈於2024-11-07
  • 使用 React 建立食譜查找器網站
    使用 React 建立食譜查找器網站
    Introduction In this blog, we'll be building a Recipe Finder Website using React. This app allows users to search for their favorite recipes,...
    程式設計 發佈於2024-11-07
  • Turborepo 與 Nx:哪種 Monorepo 工具適合您?
    Turborepo 與 Nx:哪種 Monorepo 工具適合您?
    随着现代开发变得越来越复杂,monorepos变得越来越流行。它们允许将多个项目或包存储在单个存储库中,从而简化依赖关系管理并促进更好的协作。用于管理 monorepos 的两个顶级工具是 Turborepo 和 Nx。 这两种工具都旨在提高处理单一存储库的效率和可扩展性,但它们具有独特的优势。在本...
    程式設計 發佈於2024-11-07
  • Java 陣列簡介
    Java 陣列簡介
    编程通常涉及管理和操作大量数据,对此高效且有效的数据结构至关重要。数组是计算机科学中的基本数据结构,提供了一种存储固定大小的相同类型元素序列的方法。在本博客中,我们将深入了解 Java 中的数组:了解它们是什么、它们的语法、如何对它们进行操作以及它们的内存管理。 为什么我们需要数组?...
    程式設計 發佈於2024-11-07
  • 解決 CORS 問題的方法
    解決 CORS 問題的方法
    要解决 CORS 问题,您需要在 Web 服务器(如 Apache 或 Nginx)、后端(如 Django、Go 或 Node.js)中添加适当的标头,或在前端框架(如 React 或 Next.js)中。以下是每个平台的步骤: 1. 网络服务器 阿帕奇 您可以在 ...
    程式設計 發佈於2024-11-07
  • 記憶體對齊如何影響 C 結構的大小?
    記憶體對齊如何影響 C 結構的大小?
    C 結構中的記憶體對齊使用 C 結構時,理解記憶體對齊至關重要。記憶體對齊是指將資料在記憶體中放置在特定的邊界處。在 32 位元機器上,記憶體通常按 4 位元組邊界對齊。 結構的記憶體對齊考慮以下結構:typedef struct { unsigned short v1; unsig...
    程式設計 發佈於2024-11-07
  • 受頂級旅遊景點啟發建構創新項目:令人難忘的旅遊體驗開發人員指南
    受頂級旅遊景點啟發建構創新項目:令人難忘的旅遊體驗開發人員指南
    作為開發商,我們經常從周圍的世界中汲取靈感——還有什麼比令人難以置信的旅遊景點更好的來源呢?無論您是在開發旅行應用程式、沉浸式體驗還是基於位置的服務,了解目的地的脫穎而出都是關鍵。看看這份關於阿爾巴尼亞最佳旅遊景點的終極指南,為您的下一個創意項目提供動力,並了解這些地標如何在現實世界和數位世界中塑造...
    程式設計 發佈於2024-11-07
  • 如何使用 std::locale 在 C++ 中使用逗號格式化數字?
    如何使用 std::locale 在 C++ 中使用逗號格式化數字?
    在C 中用逗號格式化數字在C 中,std::locale 類別提供了一種依賴於區域設定的方式用逗號格式化數字.std::locale 與std::stringstream要將數字格式化為帶逗號的字串,可以將std::locale 與std::stringstream 一起使用如下:#include ...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3