Php 如何在数组中保留特定的键值元素并删除rest?

Php 如何在数组中保留特定的键值元素并删除rest?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,$1 Array ( [2018] => Array () [2019] => Array ( [5] => 2966 ) [2020] => Array ( [0] => 2930 [1] => 2919 ) ) 第二个阵列是: 美元成本 Array ( [2018] => Arr

$1

Array (
    [2018] => Array ()

    [2019] => Array
        (
            [5] => 2966
        )

    [2020] => Array
        (
            [0] => 2930
            [1] => 2919
        )
)
第二个阵列是:

美元成本

Array
(
    [2018] => Array
        (
            [2789] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [2874] => Array
                (
                    [jh] => 0.5
                    [presta] => 1
                    [log] => 0
                )

            [3786] => Array
                (
                    [jh] => 7
                    [presta] => 0
                    [log] => 0
                )

            [315] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [325] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [3793] => Array
                (
                    [jh] => 0.5
                    [presta] => 1.2
                    [log] => 0
                )

            [3796] => Array
                (
                    [jh] => 22
                    [presta] => 27.4
                    [log] => 0
                )

            [3798] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [3800] => Array
                (
                    [jh] => 17
                    [presta] => 0
                    [log] => 0
                )

            [3832] => Array
                (
                    [jh] => 2
                    [presta] => 9
                    [log] => 0
                )

        )

    [2019] => Array
        (
            [2930] => Array
                (
                    [jh] => 1
                    [presta] => 0
                    [log] => 0
                )

            [3786] => Array
                (
                    [jh] => 4
                    [presta] => 0
                    [log] => 0
                )

            [315] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [3796] => Array
                (
                    [jh] => 14
                    [presta] => 44
                    [log] => 0
                )

            [3834] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [2966] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

        )

    [2020] => Array
        (
            [2930] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

            [2919] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )

        )

)
我只想保留第二个数组中第一个数组中的记录,我想取消第二个数组中剩余记录的设置

如何仅保留第2个数组中与第1个数组中的键值匹配的记录?

您可以使用

这将减少迭代次数

$result=[];
foreach ($array_one as $k => $val) {
    if (!empty($val))
        $result[$k] = array_intersect_key($costs[$k], array_flip($val));
}
print_r($result);

最终,它将只保留那些与
array\u one

匹配的索引数据这是代码的循环版本:

输出:

Array
(
    [2019] => Array
        (
            [2966] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )
        )
    [2020] => Array
        (
            [2930] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )    
            [2919] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )    
        )    
)

只需使用两个foreach循环并检查索引是否匹配,如果不匹配,请使用unset()欢迎我的奖励+1:D
$output = array();
foreach ($array_one as $key => $keys) {
    if (count($keys))
        $output[$key] = array_intersect_key($costs[$key], array_flip($keys));
}
print_r($output);
Array
(
    [2019] => Array
        (
            [2966] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )
        )
    [2020] => Array
        (
            [2930] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )    
            [2919] => Array
                (
                    [jh] => 0
                    [presta] => 0
                    [log] => 0
                )    
        )    
)