Laravel中如何将首个/选中的订单移至列表末尾?
解决指定订单移至列表底部的问题
你的代码里用unset($order_items[$key])会直接移除原位置的元素,虽然之后又把元素加回去,但数组索引会变得不连续,而且手动计算最后索引的逻辑容易出错。下面是优化后的写法,既能保留元素又能正确移到末尾:
按指定order_id移动订单到末尾
if (isset($request['defer_order']) && $request['defer_order'] !== null) { $order_id = $request['defer_order']; foreach ($order_items as $key => $order_item) { if ($order_item->order_id == $order_id) { // 先保存目标订单 $target_order = $order_item; // 删除原位置的元素 unset($order_items[$key]); // 重置数组索引(可选,需要连续数字索引时用) $order_items = array_values($order_items); // 把目标订单追加到数组最后 $order_items[] = $target_order; // 找到后直接跳出循环,不用继续遍历 break; } } }
如果是固定把首个订单移到底部
如果你的需求是不管order_id,直接把第一个订单移到末尾,代码可以更简单:
if (!empty($order_items)) { // 取出第一个元素并删除原位置 $first_order = array_shift($order_items); // 追加到数组末尾 $order_items[] = $first_order; }
关键说明
- 避免在循环里动态计算数组长度,
unset后数组长度会变化,手动算索引容易出错 - 用
$order_items[] = $元素是PHP里追加元素到数组末尾最可靠的方式 - 找到目标后
break循环,减少不必要的遍历
内容的提问来源于stack exchange,提问作者Muhammad Bilal Tariq
相关产品推荐
相关产品推荐

