You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组实现Pickup与后续所有Delivery的索引组合方案问询

正确实现Pickup与后续Delivery的索引组合

问题核心

你需要每个Pickup仅和它之后出现的所有Delivery生成索引/位置组合,但之前的方法是将所有Pickup与所有Delivery做全量笛卡尔积,导致出现Pickup和它之前的Delivery错误配对的情况。

解决方案思路

  1. 先遍历原数组,记录所有Pickup和Delivery的索引及对应位置信息
  2. 对每个Pickup,只筛选出索引大于它的Delivery进行配对
  3. 收集所有符合顺序要求的组合

代码实现

public function getPickupDeliveryCombinations($stops) {
    $pickupList = [];
    $deliveryList = [];
    
    // 收集所有Pickup和Delivery的索引与位置信息
    foreach ($stops as $index => $stop) {
        foreach ($stop['location_stop_actions'] as $stopAction) {
            $actionName = $stopAction['stop_action_name'];
            if ($actionName === 'Pickup') {
                $pickupList[] = [
                    'index' => $index,
                    'location' => $stop['load_location_name']
                ];
            } elseif ($actionName === 'Delivery') {
                $deliveryList[] = [
                    'index' => $index,
                    'location' => $stop['load_location_name']
                ];
            }
        }
    }
    
    $validCombinations = [];
    // 遍历每个Pickup,匹配之后的所有Delivery
    foreach ($pickupList as $pickup) {
        $pickupIndex = $pickup['index'];
        foreach ($deliveryList as $delivery) {
            if ($delivery['index'] > $pickupIndex) {
                // 如果需要位置名称组合,用下面这行
                $validCombinations[] = [$pickup['location'], $delivery['location']];
                // 如果需要纯索引字符串(比如示例的"0-1"),替换为:
                // $validCombinations[] = $pickupIndex . '-' . $delivery['index'];
            }
        }
    }
    
    return $validCombinations;
}

代码说明

  • 先遍历数组时同时记录索引和位置信息,既保证顺序判断的依据,也保留你需要的位置名称
  • 通过$delivery['index'] > $pickupIndex的判断,严格确保Delivery出现在Pickup之后,从根源避免错误配对
  • 可以根据需求切换返回格式:是位置名称数组,还是纯索引字符串

原方法出错原因

你之前的combinations函数是生成两个数组的全量笛卡尔积,完全忽略了原数组中Pickup和Delivery的先后顺序,所以会出现Pickup和它之前的Delivery配对的错误情况。

内容的提问来源于stack exchange,提问作者Ravinder singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:53:13