”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 PHP 中根据与另一个 2D 数组的交集从 2D 数组中过滤行?

如何在 PHP 中根据与另一个 2D 数组的交集从 2D 数组中过滤行?

发布于2024-11-08
浏览:498

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
  • PL/SQL 中的批量收集
    PL/SQL 中的批量收集
    当然!下面是一个简单的例子来演示 BULK COLLECT 在 PL/SQL 中的使用。 什么是批量收集? BULK COLLECT 是一种用于在单个操作中将 SQL 查询中的多行获取到 PL/SQL 集合中的方法。这减少了 SQL 和 PL/SQL 引擎之间的上下文切换,使流程更加高效,尤其是对于...
    编程 发布于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
  • 如何使用 PHP Curl 建立持久 HTTP 连接?
    如何使用 PHP Curl 建立持久 HTTP 连接?
    使用 PHP Curl 实现持久 HTTP 连接使用 Curl 库进行 HTTP 请求时,维护持久连接可以通过减少连接开销来显着提高性能。本文探讨如何使用 Curl 建立和管理 keepalive 连接。重用 Curl 句柄进行持久连接默认情况下,当使用相同的 Curl 句柄时,Curl 会为后续请...
    编程 发布于2024-11-08
  • 如何协调 Ed25519 的 Golang 和 Bittorrent 私钥格式之间的差异?
    如何协调 Ed25519 的 Golang 和 Bittorrent 私钥格式之间的差异?
    ed25519.Public Result Discrepancy问题是由 ed25519 私钥的不同格式引起的。密钥以 32 字节种子开始,使用 SHA512 进行哈希处理以创建 64 字节(在此过程中某些位会翻转)。Golang 私钥格式 Golang 私钥格式由 32 字节种子与 32 字节公...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3