PHP基于单维数组重新排序多维数组

时间:2018-05-21 13:23:43

标签: php arrays multidimensional-array

多维数组

Array
(
    [0] => Array
        (
            [ID] => 5068
            [Item] => 2737
            [Unit] => 15
        )
    [1] => Array
        (
            [ID] => 5067
            [Item] => 2737
            [Unit] => 13
        )

)

单维数组

Array (
    [0] => 11
    [1] => 13
    [2] => 15 
)

预期产出:

Array
(
    [0] => Array
        (
            [ID] => 5067
            [Item] => 2737
            [Unit] => 13
        )
    [1] => Array
        (
            [ID] => 5068
            [Item] => 2737
            [Unit] => 15
        )

)

单维数组不必是ASC / DESC顺序。我想根据单位值根据单维数组重新排序多维数组。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

这样的事情可能有用吗?

$multiDimArray = [
    0 => [
        'ID' => 5068,
        'Item' => 2737,
        'Unit' => 15
        ],
    1 => [
        'ID' => 5067,
        'Item' => 2737,
        'Unit' => 13
    ]
];

$singleDim = [
    11,13,15
];

usort($multiDimArray,function($a,$b){
    global $singleDim;
    return ($singleDim[0] >= $a['Unit']) ? -1 :1;
});

print_r($multiDimArray);
在我的脑海中有一些东西告诉我,我错过了一些东西。但随意试试吧。

答案 1 :(得分:0)

假设单个数组中的值都映射到Unit中的值,您可以循环单维数组,然后循环多维数组中的值。

在内部循环中使用in_array来检查单维数组中的值是否出现在多维数组中。如果是,您可以将其添加到新数组中。

$result = [];

foreach ($singleDimension as $sm) {
    foreach ($multiDimensional as $md) {
        if (in_array($sm, $md)) {
            $result[] = $md;
        }
    }
}

Demo