Php 如何按自定义顺序重新排列多维数组

Php 如何按自定义顺序重新排列多维数组,php,Php,我正在尝试将中的多维数组重新排列为自定义顺序。我正在匹配这些键,如果这些键出现在其他数组中,它应该移到顶部。我在网上找不到任何东西,也找不到任何php函数可以做到这一点 $original = [ 1=>[ 1=>['brand'=> 'bmw' , 'color'=> 'white'], 171=>['brand'=> 'audi' , 'color'=> 'black'], 172=>['

我正在尝试将中的多维数组重新排列为自定义顺序。我正在匹配这些键,如果这些键出现在其他数组中,它应该移到顶部。我在网上找不到任何东西,也找不到任何php函数可以做到这一点

$original = [
    1=>[
        1=>['brand'=> 'bmw' , 'color'=> 'white'],
        171=>['brand'=> 'audi' , 'color'=> 'black'],
        172=>['brand'=> 'volvo' , 'color'=> 'black'],
        175=>['brand'=> 'citroen' , 'color'=> 'green']
    ],
    129=>[
        201=>['brand'=> 'volkswagen' , 'color'=> 'grey'],
        206=>['brand'=> 'bentley' , 'color'=> 'grey'],
        209=>['brand'=> 'mazda' , 'color'=> 'blue'],
    ],
];

$filterOnArray = [172,175,209];

$result = [
    1=>[
        172=>['brand'=> 'volvo' , 'color'=> 'black'],//changed
        175=>['brand'=> 'citroen' , 'color'=> 'green'],//changed
        1=>['brand'=> 'bmw' , 'color'=> 'white'],       
        171=>['brand'=> 'audi' , 'color'=> 'black'],
       
    ],
    129=>[
        209=>['brand'=> 'mazda' , 'color'=> 'blue'],//changed
        201=>['brand'=> 'volkswagen' , 'color'=> 'grey'],
        206=>['brand'=> 'bentley' , 'color'=> 'grey']
    ],
];
一些我已经尝试过的代码

        $sortedArray = [];//the main data
        $choosenFilters = [3,66,989];
        $newStackFilters = [];
        $unshiftArray = [];
        foreach ($sortedArray as $k => $v) {
            if (in_array($k, $choosenFilters)) {

                $sortedArray[$k] = $v;
                unset($sortedArray[$k]);
            } else {
                $newStackFilters[$k] = $v;
            }
        }
        $sortedArray = $unshiftArray + $newStackFilters;
您可以使用
foreach()
循环来执行此操作:

$finalArray = [];


    foreach($original as $key=>$orig ){
        $nonfiter =$orig; 
        foreach($filterOnArray as $filterOnArr){
            if(isset($orig[$filterOnArr])){
                $finalArray[$key][$filterOnArr] = $orig[$filterOnArr];
                unset($nonfiter[$filterOnArr]);
            }
        }
        $finalArray[$key] = $finalArray[$key] +$nonfiter;
    }
    
    print_r($finalArray);

你试过什么吗?请添加一些代码。当然,请参阅帖子;-)您正在查找
usort
否键应保持不变,但在我的代码中,它会在第31行出现偏移量1错误。您的解决方案有效,但不适用于我的数据,因此我需要找到原因。谢谢你的解决方案