」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?

如何在 PHP 中根據與另一個 2D 數組的交集從 2D 數組過濾行?

發佈於2024-11-08
瀏覽:578

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

基於行交集過濾二維數組的行

在PHP 中,array_diff_assoc() 函數旨在找出兩個數組之間的差異,同時對鍵值進行優先排序對。然而,當使用此函數根據與另一個 2D 數組的交集來過濾 2D 數組中的行時,它可能不會總是產生預期的結果。

理解問題

問題的出現​​是由於由 array_diff_assoc() 執行的嚴格比較。它在比較過程中比較鍵值對的字串表示形式。這意味著即使兩個鍵值對包含相同的值,除非它們的字串表示形式相同,否則它們也不會被視為相等。

範例資料

考慮以下範例資料:

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];

不正確的輸出

當我們嘗試使用array_diff_assoc() 根據$array2 中的行過濾$array1 時,我們得到不正確的輸出:

$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]

此輸出顯示結果中存在公用行,而預期輸出應包含 $array1 中的獨佔行。

問題原因

如前面所提到的,問題在於 array_diff_assoc() 執行的嚴格比較。比較以下兩個陣列時:

Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )

此函數傳回不同的鍵值對作為結果,因為鍵值對不是字串相同的。

正確方法

為了解決這個問題,我們可以使用稍微不同的方法來檢查數組中是否存在特定的鍵值:

$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]

此方法使用 in_array() 來檢查 $array1 中的每一行是否存在於 $array2 中。如果 $array2 中不存在某行,則該行將包含在過濾結果中。

最新教學 更多>
  • 使用 JAX-RS 和 Jersey 建立 RESTful API
    使用 JAX-RS 和 Jersey 建立 RESTful API
    RESTful API 已成為現代應用程式開發的重要組成部分。它們提供了一種靈活且可擴展的方式來與服務和資料互動。在這篇文章中,我們將探討如何使用 JAX-RS 和 Jersey 建立 RESTful API。 什麼是 JAX-RS? JAX-RS(用於 RESTful 服務的 Java API...
    程式設計 發佈於2024-11-08
  • 為什麼在 Windows 上從命令列存取 PHP 腳本時出現錯誤?
    為什麼在 Windows 上從命令列存取 PHP 腳本時出現錯誤?
    在Windows 上使用命令列存取PHP:常見錯誤故障排除嘗試在Windows 上透過命令列存取PHP 腳本時,您可能會遇到如所提供的螢幕截圖中所示的錯誤。此故障源自於 Windows 路徑變數中的遺漏。要修正這種情況,請按照下列步驟操作:方法1:將PHP 新增至路徑變數右鍵單擊“我的電腦”圖示. ...
    程式設計 發佈於2024-11-08
  • 如何解決Python檔案處理中的「FileNotFoundError:沒有這樣的檔案或目錄」?
    如何解決Python檔案處理中的「FileNotFoundError:沒有這樣的檔案或目錄」?
    調試“FileNotFoundError:沒有這樣的文件或目錄”嘗試在Python中讀取文件時,遇到“FileNotFoundError”。此錯誤表示腳本無法找到指定的檔案。您的程式碼要求使用者輸入檔案名稱“test.rtf”,但錯誤表示找不到該檔案。 故障排除:檢查檔案路徑: 確保檔案名稱正確且存...
    程式設計 發佈於2024-11-08
  • 使用 Stimulus 建立可調整大小的導航
    使用 Stimulus 建立可調整大小的導航
    本文最初發佈於 Rails Designer——Rails 應用程式的 UI 元件庫,使用 ViewComponent 構建,使用 Tailwind CSS 設計並使用 Hotwire 增強。 如果您的應用程式有側邊欄導航(這在大多數螢幕足夠寬的情況下很常見),那麼調整其大小可能是一個很好的添加功...
    程式設計 發佈於2024-11-08
  • PHP中如何有效率地檢查變數空值並處理未初始化的變數?
    PHP中如何有效率地檢查變數空值並處理未初始化的變數?
    檢查變數為空:最佳化和簡化在 PHP 中,在處理變數之前檢查變數是否為空至關重要。範例程式碼檢查 $user_id、$user_name 和 $user_logged 是否為空,但有更有效的方法可以實現此目的。 使用身分運算子(===)若要確定變數是否真正為NULL(而非空字串或零),請使用恆等運算...
    程式設計 發佈於2024-11-08
  • 如何消除Python清單中的重複字典?
    如何消除Python清單中的重複字典?
    從字典列表中刪除重複項資料集合中的重複可能會妨礙高效的資料處理。在Python程式設計中,字典列表通常用於儲存表格資料。但是,在某些情況下,您可能需要從此類清單中刪除重複的字典。 考慮以下字典列表:[ {'id': 1, 'name': 'john', 'age': 34}, {'i...
    程式設計 發佈於2024-11-08
  • PL/SQL 中的批量收集
    PL/SQL 中的批量收集
    當然!以下是一個簡單的範例來示範 BULK COLLECT 在 PL/SQL 中的使用。 什麼是大量收集? BULK COLLECT 是一種用於在單一操作中將 SQL 查詢中的多行取得到 PL/SQL 集合中的方法。這減少了 SQL 和 PL/SQL 引擎之間的上下文切換,使流程更加高效,尤其是...
    程式設計 發佈於2024-11-08
  • 提高 Spring Boot 應用程式的效能 - 第二部分
    提高 Spring Boot 應用程式的效能 - 第二部分
    在本文的第一部分中,我们学习了如何提高应用程序的性能,将 Tomcat 替换为 Undertow,即高性能 Web 服务器,除了启用和配置数据压缩之外,还可以减少通过网络传输的 HTTP 响应的大小。 现在,我们将讨论如何在持久化部分提高Spring Boot应用程序的性能,但首先我们需要了解什么是...
    程式設計 發佈於2024-11-08
  • C 程式設計學習路線圖
    C 程式設計學習路線圖
    学习 C 编程是一项令人兴奋且具有挑战性的工作,因为它是一种多功能且功能强大的语言,构成了众多现代编程语言的基础。 让我们看看住在小镇的充满好奇心的年轻学生Alex是如何决定踏上学习C编程之旅的。 C 程序员的旅程 Alex,一个充满好奇心的年轻学生,踏上了学习 C 编程的旅程。他...
    程式設計 發佈於2024-11-08
  • 用 JavaScript 解釋數學概念
    用 JavaScript 解釋數學概念
    學習數學符號可能會讓人感到害怕。 所以我創建了常見數學符號的 JS 程式碼範例清單: https://math4devs.com 歡迎 PR! https://github.com/joshnuss/math4devs.com
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中將 Array_column 與物件陣列一起使用?
    如何在 PHP 中將 Array_column 與物件陣列一起使用?
    Array_column 和物件陣列在某些場景下有必要將 array_column 與物件陣列一起使用。但是,直接將 array_column 應用於物件陣列可能不會產生預期結果,因為其功能主要是為簡單陣列設計的。 要克服此限制,請考慮以下解決方案:PHP 5 用戶對於PHP 5 用戶,array_...
    程式設計 發佈於2024-11-08
  • 如何在Python中高效率地轉置矩陣?
    如何在Python中高效率地轉置矩陣?
    轉置矩陣 Python 中的轉置轉置運算反轉矩陣的行和列。在程式設計中處理矩陣時,理解這個概念至關重要。在 Python 中,您可以使用各種方法執行矩陣轉置,每種方法都有不同的方法和效率。 使用 Zip 與 Asterisk 轉置zip(*) 是一種方便且易於使用的方法。轉置矩陣的簡單方法。它將矩陣...
    程式設計 發佈於2024-11-08
  • 從靜態到動態:建立響應式單頁網站
    從靜態到動態:建立響應式單頁網站
    從靜態到動態:建立響應式單頁網站 嘿,代碼愛好者們!今天,我想分享我最近為一家名為「最後一站咖啡館」的虛構咖啡館建立響應式單頁網站的經驗。該專案是結合 HTML、CSS 和 JavaScript 來創建流暢、用戶友好的體驗的絕佳練習。讓我們深入探討一些可以應用於您自己的專案的關鍵要點! https...
    程式設計 發佈於2024-11-08
  • 創建強大的 XSS 多語言
    創建強大的 XSS 多語言
    多語言有效負載利用多種編碼、注入和混淆技術來繞過過濾器、迷惑解析器並跨不同上下文(如HTML、JavaScript、CSS、JSON 等)觸發執行。 -合併評論風格 多語言者經常透過合併不同的註解風格來混淆解析器: JavaScript: //, /* */ HTML: <!-- -->...
    程式設計 發佈於2024-11-08
  • 如何克服將 PHP 陣列轉換為 CSV 檔案時出現的錯誤
    如何克服將 PHP 陣列轉換為 CSV 檔案時出現的錯誤
    將PHP 陣列轉換為CSV 檔案將產品陣列轉換為CSV 檔案可能是一個簡單的過程,但如果檔案最終會成為單行長行,或如果標頭未啟動下載。 單行問題的一個解決方案是利用fputcsv() 函數而不是手動寫出值。透過使用 fputcsv(),您可以輕鬆地將資料格式化為 CSV 相容的結構。程式碼可以改進如...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3