$iteration = [2, 1, 3];
$steps = [
['name' => 'A','order' => 1],
['name' => 'B', 'order' => 2],
['name' => 'C', 'order' => 3]
];
$result = collect($steps)->sortBy(function ($step) use ($iteration) {
return array_search($step['order'], $iteration);
})->values()->toArray();
And the result is
[
['name' => 'B', 'order' => 2],
['name' => 'A', 'order' => 1],
['name' => 'C', 'order' => 3]
]
So your code could look like this
public function reorder($iteration)
{
$this->steps = collect($steps)->sortBy(function ($step) use ($iteration) {
return array_search($step['order'], $iteration);
})->values()->toArray();
}
or with pure php
public function reorder($iteration)
{
usort($this->steps, function ($step) use ($iteration) {
return array_search($step['order'], $iteration);
});
}
with arrow functions (since PHP 7.4)
public function reorder($iteration)
{
usort($this->steps, fn ($step) => array_search($step['order'], $iteration));
}