I’am trying to rearrange an mutlidimensional array in a to a custom order. I’am matching the keys and if these key are present in an other array it should move to the top. I couldn’t find any thing on the web nor any php functions that can do this.
JavaScript
x
$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']
],
];
Some code that I already have tried
JavaScript
$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;
Advertisement
Answer
You can use foreach()
loop to do so:
JavaScript
$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);