繁体   English   中英

使用array_filter过滤多维数组

[英]Using array_filter to filter multidimensional array

我有两个数组,第二个是多维数组。 我试图返回第三个数组,其中Array2中的host_id与Array1中的值匹配。

Array1 
(
    [0] => 146
    [1] => 173
)

Array2
(
    'localhost' => (
        '0' => (
            'host_id' => 146
        ),
    ),
    '192.168.0.43' => (
        '1' => (
            'host_id' => 160
        ),
    ),
    '192.168.0.38' => (
        '2' => (
            'host_id' => 173
        )
    )
)

因此,Array3应该是:

    Array3
    (
        [localhost] => Array
            '0' => (
                'host_id' => 146
            ),

        [192.168.0.38] => Array
            '0' => (
                'host_id' => 173
            ),

    )

我已经尝试过了,但是只返回了最后一个匹配的host_id。

foreach ($Array1 as $value) {   

    $filtered_hosts = array_filter($Array2, function ($host) use ($value) {

        return in_array($host['host_id'], $host_id);
    });
}

我想念什么?

您可以只使用array_filter而不使用foreach

将第一个数组传递给use($array1)并使用in_array来检查'host_id'的值是否存在。

$array1 = [
  146,
  173
];

$array2 = [
    'localhost' => [
        'host_id' => 146
    ],
    '192.168.0.43' => [
        'host_id' => 160
    ],
    '192.168.0.38' => [
        'host_id' => 173
    ]
];

$filtered_hosts = array_filter($array2, function($x) use ($array1) {
    return in_array($x['host_id'], $array1);
});


print_r($filtered_hosts);

演示

更新

对于更新的数据结构,您可以从子数组中获得第一项,例如reset

$filtered_hosts = array_filter($array2, function ($x) use ($array1) {
    return in_array(reset($x)['host_id'], $array1);
});

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM