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

PHP:高效在子数组中查找关联SKU并构建目标数组

高效数组关联匹配方案

核心思路是空间换时间,先将$similar_products重构为以SKU为键的索引数组,把原本O(n)的in_array查找变成O(1)的键值访问,彻底摆脱嵌套循环的高时间复杂度问题。

步骤1:重构相似商品数组为索引结构

假设你的$similar_products结构是类似这样(每个元素包含主SKU及对应相似SKU列表):

$similar_products = [
    ['sku' => 'PROD001', 'similar_skus' => ['PROD002', 'PROD003']],
    ['sku' => 'PROD002', 'similar_skus' => ['PROD001', 'PROD004']],
    // ...更多数据
];

先把它转成键为SKU、值为相似SKU列表的关联数组:

$similar_index = [];
foreach ($similar_products as $item) {
    $similar_index[$item['sku']] = $item['similar_skus'];
}

步骤2:遍历商品数组生成最终结果

只需一次线性遍历$products,直接通过键从索引数组中取对应相似SKU(无匹配时设为空数组):

$final = [];
foreach ($products as $product) {
    $product['similar'] = $similar_index[$product['sku']] ?? [];
    $final[] = $product;
}

性能对比

  • 原方案(嵌套循环+in_array):时间复杂度为O(n*m),数据量越大性能下降越明显;
  • 优化方案:时间复杂度为O(n+m),仅需两次线性遍历,查找操作是常数时间,数据量越大优势越突出。

适配不同结构的补充

如果$similar_products是单条关联的结构(比如['main_sku' => 'PROD001', 'similar_sku' => 'PROD002']),可以先合并相同主SKU的相似项:

$similar_index = [];
foreach ($similar_products as $item) {
    $main_sku = $item['main_sku'];
    $similar_index[$main_sku] = isset($similar_index[$main_sku]) 
        ? [...$similar_index[$main_sku], $item['similar_sku']] 
        : [$item['similar_sku']];
}

后续生成$final的逻辑保持不变即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:18:27