Laravel:对比两个产品数组,校验API产品价格是否更高
嘿,我来帮你搞定这个Laravel里的产品对比逻辑!咱们一步步来实现:
第一步:获取并整理两个产品数组
首先先拿到你提交的产品数组和API返回的产品数组,这里假设两个数组的结构都是包含name(产品名)和price(价格)字段的二维数组——如果你的实际结构不一样,记得对应调整键名就行:
// 获取表单提交的「我的产品数组」 $myProducts = Input::get('product'); // 替换成你实际的API调用逻辑,这里用示例数组演示 $apiProducts = [ ['name' => '无线耳机', 'price' => 299], ['name' => '机械键盘', 'price' => 399], ['name' => '蓝牙音箱', 'price' => 199] ];
第二步:优化API数组的查找效率
为了避免每次循环都遍历整个API数组(数据量大的时候会很慢),咱们把API数组转成以产品名为键的关联数组,这样查找同名产品就是O(1)的速度:
// 用Laravel集合快速转成键值对数组 $apiProductsByName = collect($apiProducts)->keyBy('name')->toArray();
第三步:遍历对比逻辑
接下来遍历你的产品数组,逐个检查是否存在同名API产品,再对比价格:
foreach ($myProducts as $myProduct) { // 先判断API里有没有同名产品 if (isset($apiProductsByName[$myProduct['name']])) { $apiProduct = $apiProductsByName[$myProduct['name']]; // 注意:如果价格是字符串类型,一定要转成数值再比较! $myPrice = (float)$myProduct['price']; $apiPrice = (float)$apiProduct['price']; if ($apiPrice > $myPrice) { // 这里写你要执行的逻辑,比如标记产品、记录日志、添加提示信息等 // 示例:把满足条件的产品存到一个数组里 $higherPriceProducts[] = [ 'name' => $myProduct['name'], 'my_price' => $myPrice, 'api_price' => $apiPrice ]; } } } // 可以打印看看结果 dd($higherPriceProducts);
额外小技巧:用集合简化逻辑
如果你喜欢Laravel集合的链式操作,也可以用filter方法直接筛选出所有满足条件的产品:
$higherPriceProducts = collect($myProducts)->filter(function ($myProduct) use ($apiProductsByName) { if (!isset($apiProductsByName[$myProduct['name']])) { return false; } $apiProduct = $apiProductsByName[$myProduct['name']]; return (float)$apiProduct['price'] > (float)$myProduct['price']; })->toArray();
内容的提问来源于stack exchange,提问作者dwdawdawdaw
相关产品推荐
相关产品推荐

