Php 如何按自定义顺序重新排列多维数组
我正在尝试将中的多维数组重新排列为自定义顺序。我正在匹配这些键,如果这些键出现在其他数组中,它应该移到顶部。我在网上找不到任何东西,也找不到任何php函数可以做到这一点Php 如何按自定义顺序重新排列多维数组,php,Php,我正在尝试将中的多维数组重新排列为自定义顺序。我正在匹配这些键,如果这些键出现在其他数组中,它应该移到顶部。我在网上找不到任何东西,也找不到任何php函数可以做到这一点 $original = [ 1=>[ 1=>['brand'=> 'bmw' , 'color'=> 'white'], 171=>['brand'=> 'audi' , 'color'=> 'black'], 172=>['
$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错误。您的解决方案有效,但不适用于我的数据,因此我需要找到原因。谢谢你的解决方案