php - 使用包含两个元素的关联数组在多维数组中搜索唯一行
问题描述
我试图从第二个数组中获取与第一个数组中的关联元素匹配的值。
$array1
只能(最多)匹配一行与限定sr_no
和batch_id
值,因为这两列的组合将始终提供唯一性。换句话说,当找到匹配时,将没有机会在剩余的数据中进行另一次匹配。
$array1 = ['sr_no' => 72, 'batch_id' => 1];
$array2 = [
['quantity' => 22, 'sr_no' => 71, 'batch_id' => 2, 'inq_id' => 91],
['quantity' => 35, 'sr_no' => 72, 'batch_id' => 1, 'inq_id' => 92],
['quantity' => 20, 'sr_no' => 69, 'batch_id' => 3, 'inq_id' => 90],
];
预期输出:
['quantity' => 35, 'sr_no' => 72, 'batch_id' => 1, 'inq_id' => 92]
我试过了$result = array_diff_assoc($array2, $array1);
,但它正在打印整个$array2
数组值。
解决方案
一旦找到匹配项,您应该立即停止迭代。
如果您$array1
的设计是灵活array_intersect_assoc()
的,请使用返回匹配元素,然后检查是否找到了所有必需的匹配项。
代码:(演示)
$array1 = ['sr_no' => 72, 'batch_id' => 1];
$array2 =
[
['quantity' => 22, 'sr_no' => 71, 'batch_id' => 2, 'inq_id' => 91],
['quantity' => 35, 'sr_no' => 72, 'batch_id' => 1, 'inq_id' => 92],
['quantity' => 20, 'sr_no' => 69, 'batch_id' => 3, 'inq_id' => 90],
];
$result = null;
foreach ($array2 as $row) {
if (array_intersect_assoc($array1, $row) === $array1) {
$result = $row;
break;
}
}
var_export($result);
输出:
array (
'quantity' => 35,
'sr_no' => 72,
'batch_id' => 1,
'inq_id' => 92,
)
推荐阅读
- python - 如何通过视频稳定单应性得到的透视图?
- windows - 从 Linux VM SSH 到 Azure Windows VM 所需的步骤
- r - 将带有换行符和制表符的数据框写入文件
- kotlin - 我在 Kotlin 中的快速排序函数返回错误的输出
- mysql - 将 mysql 的结果显示为导航树
- javascript - 理解 CSS 代码片段在 ReactApp 中实现视差效果
- java - Java Swing 标签未出现
- r - 尝试使用 rnorm 函数模拟数据集时遇到语法错误
- android - 视图绑定无权访问片段
- linux - 我在使用 bochs+gdb 调试 linux-0.11 时遇到了一些问题