查找多维数组每行的子集值与另一个平面关联数组之间的交集

问题描述 投票:0回答:1

我有两个数组 $firstarray 和 $secondarray 如下:

$firstarray = [
    [
        'id' => 1.25,
        'Name' => 'rose',
        'Number' => 15,
        'DOB' => [
            [
                'Day' => 13,
                'Month' => 5,
                'Year' => 1993
            ]
        ],
        'SSN' => [12345, 3455]
    ],
    [
        'id' => 1.15,
        'Name' => 'orchid',
        'Number' => 7,
        'DOB' => [
            [
                'Day' => 3,
                'Month' => 7,
                'Year' => 1912
            ]
        ],
        'SSN' => [12363, 3465]
    ],
];

$secondarray = ['Day' => 13, 'Month' => 5, 'Year' => 1993];

我想通过将 DOB 数据与第二个数组数据进行比较来过滤第一个数组。

foreach ( $firstarray as $item ) {
    print_r(array_intersect_assoc( $secondarray, $item ); 
}

我的问题是两个数组应该只在第一次迭代时相交,但我的代码在所有迭代上都相交。我认为它只是相交的键,即日、月、年。如何检查值是否也匹配?

php arrays multidimensional-array filtering intersection
1个回答
1
投票

这就是您要找的吗

$result = array();
foreach ( $firstarray as $item ) {
    $instersectArray=array_intersect_assoc($secondarray,$item['DOB'][0]);
    if($instersectArray){
        $result[] = $item;
    }
}
print_r($result);

检查演示

如果您只需要一场比赛

$result = array();
foreach ( $firstarray as $item ) {
    $instersectArray=array_intersect_assoc($secondarray,$item['DOB'][0]);
    if($instersectArray && empty($result)){
        $result[] = $item;
    }
}
print_r($result);

检查演示

© www.soinside.com 2019 - 2024. All rights reserved.