collection = collect([ ['id' => 1, 'name' => 'pizza', 'order' => 9999], ['id' => 2, 'name' => 'pineapple', 'order' => 9999], ['id' => 3, 'name' => 'ethereum', 'order' => 9999], ['id' => 4, 'name' => 'bitcoin', 'order' => 9999], ['id' => 5, 'name' => 'zulu', 'order' => 9999], ['id' => 6, 'name' => 'alpha', 'order' => 9999], ['id' => 7, 'name' => 'ninja', 'order' => 9999], ]); } public function testSorting() { $index = 3; $item = $this->collection->where('id', 7)->first(); $new_collection = $this->collection->reject(function ($task) use ($item) { return $item['id'] == $task['id']; }); $sorted_tasks = $new_collection->filter(function ($task, $key) use ($index) { return $key < $index; })->push($item)->merge($new_collection->filter(function ($task, $key) use ($index) { return $key >= $index; }))->map(function ($item, $key) { $item['order'] = $key; return $item; }); $index_item = $sorted_tasks->splice($index, 1)->all(); $this->assertEquals($sorted_tasks->first()['name'], 'pizza'); $this->assertEquals($sorted_tasks->last()['name'], 'alpha'); $this->assertEquals($index_item[0]['name'], 'ninja'); } }