首页 > 解决方案 > 使用包含两个元素的关联数组在多维数组中搜索唯一行

问题描述

我试图从第二个数组中获取与第一个数组中的关联元素匹配的值。

$array1只能(最多)匹配一行与限定sr_nobatch_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数组值。

标签: phparrayssearchmultidimensional-arrayfiltering

解决方案


一旦找到匹配项,您应该立即停止迭代。

如果您$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,
)

推荐阅读