如何在两个多维数组中匹配取值并获取对应产品的销售额
实现方案
直接通过Sales数组的一级键名匹配产品名称即可,不需要嵌套循环或复杂数组函数,该方式时间复杂度为O(1),是当前场景下效率最高的实现。
基础遍历实现
// $products 为你的产品数组,$sales 为销售额数组 foreach ($products as $item) { $productName = $item['product']; // 先判断对应产品的销售额是否存在,不存在可返回默认值0避免报错 $currentSales = isset($sales[$productName]) ? $sales[$productName]['sales'] : 0; // 此处编写你的业务逻辑,比如打印、存储数据等 echo "产品:{$productName} 当月销售额:{$currentSales}\n"; }
封装为函数的实现
如果需要多次调用可以封装为独立函数,建议将销售额数组作为参数传入,避免使用全局变量:
/** * 根据产品名获取对应销售额 * @param string $productName 产品名称 * @param array $salesArray 销售额数组 * @return int 销售额,不存在则返回0 */ function getSalesByProduct(string $productName, array $salesArray): int { return $salesArray[$productName]['sales'] ?? 0; } // 遍历调用示例 foreach ($products as $item) { $sales = getSalesByProduct($item['product'], $sales); // 业务逻辑处理 }
原方案问题说明
你之前使用嵌套循环遍历Sales数组的方式时间复杂度为O(n*m)(n为产品数组长度、m为销售额数组长度),数据量越大性能损耗越高,完全没有必要。你当前的场景中销售额数组的一级键正好是需要匹配的产品名称,直接通过键访问是最优解。
内容的提问来源于stack exchange,提问作者krazy4code
相关产品推荐
相关产品推荐

