通过另一个数组的键过滤一个数组[重复]

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

我有一个看起来像这样的数组:

Array
(
    [333824-00A-BLK-10] => Array
        (
            [classId] => 44
            [inv] => 0.000
            [onOrder] => 0
            [code] => 333824-00A-BLK-10
        )
    [333824-00A-BLK-10.5] => Array
        (
            [classId] => 44
            [inv] => 0.000
            [onOrder] => 0
            [code] => 333824-00A-BLK-10.5
        )
)

我想使用另一个如下所示的数组来过滤它:

Array
(
    [0] => 333824-00A-BLK-10
    [1] => 333824-00A-BLK-10.5
    [2] => 333824-00A-BLK-11
    [3] => 333824-00A-BLK-11.5
    [4] => 333824-00A-BLK-12
)

我想将结果保留在数组中,并去掉不匹配的键。我尝试了一个用 foreach 过滤数组的函数,但没有成功。有什么帮助吗?谢谢!

php arrays filter intersection
2个回答
7
投票
$result = array_intersect_key($data, array_flip($keys));

$data
是你的主数组,
$keys
是一个包含过滤键的数组


0
投票

我会制作一个虚拟数组并在 foreach 中过滤它,我不知道你的 foreach 看起来如何,但我的看起来像

$arr = array();

$filter_array = array ('333824-00A-BLK-10',
     '333824-00A-BLK-10.5',
     '333824-00A-BLK-11',
    '333824-00A-BLK-11.5',
     '333824-00A-BLK-12');

$array_to_filter = array('333824-00A-BLK-10' => array
        (
            'classId' => 44,
            'inv' => 0.000,
            'onOrder' => 0,
            'code' => '333824-00A-BLK-10'
        ),
    '333824-00A-BLK-10.5' => array
        (
            'classId' => 44,
            'inv' => 0.000,
            'onOrder' => 0,
            'code' => '333824-00A-BLK-10.5'
        )
);

foreach($array_to_filter as $filter) {

    if(array_key_exists($filter, $array_to_filter)) {
        $arr[] = $array_to_filter[$filter];
    }
}

在 $arr 中,您现在应该拥有数组中的所有现有键

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