PHP-组合两个数组并将供应商id1映射到供应商id2
我正在研究一个数组,它涉及产品ID的组合和映射 我有两个供应商,其同一产品的id相同,价格不同,特定id的名称略有不同。我只想显示为特定id(产品)提供最佳价格的供应商,每当两个阵列具有相同的产品id时。我希望显示每个可用产品,仅消除重复项,并仅显示具有最佳价格的产品 我的代码有问题,不知道怎么做 下面是我的代码。请注意,我为供应商1和供应商2制作了一个数组,而不是从数据库中提取它;所以你们可以把它复制到IDE上进行调试PHP-组合两个数组并将供应商id1映射到供应商id2,php,arrays,Php,Arrays,我正在研究一个数组,它涉及产品ID的组合和映射 我有两个供应商,其同一产品的id相同,价格不同,特定id的名称略有不同。我只想显示为特定id(产品)提供最佳价格的供应商,每当两个阵列具有相同的产品id时。我希望显示每个可用产品,仅消除重复项,并仅显示具有最佳价格的产品 我的代码有问题,不知道怎么做 下面是我的代码。请注意,我为供应商1和供应商2制作了一个数组,而不是从数据库中提取它;所以你们可以把它复制到IDE上进行调试 <?php //array for supplier 1 data
<?php
//array for supplier 1 data
$combined_sup1=array(
array('id'=>71,'product'=>'Irish Spring Deodorant Soap - 8ct','price'=>3.99, 'img'=>'images/71.jpg'),
array('id'=>14,'product'=>'L.A. Looks Sport Styling Gel 8 Oz','price'=>2.78, 'img'=>'images/14.jpg'),
array('id'=>43,'product'=>'Cetaphil Daily Facial Cleanser - 8 fl oz bottle','price'=>8.89, 'img'=>'images/43.jpg'));
// array for supplier 2 data
$combined_sup2=array(
array('id'=>21,'product'=>'Head and Shoulders- Dandruff Shampoo, 13.5 fl oz','price'=>5.94, 'img'=>'images/21.jpg'),
array('id'=>71,'product'=>'Irish Spring Soap - 8ct','price'=>3.39, 'img'=>'images/71.jpg'),
array('id'=>12,'product'=>'Colgate Total Toothpaste Advanced Whitening - 4 oz','price'=>3.59, 'img'=>'images/12.jpg'),
array('id'=>43,'product'=>'Cetaphil Daily Facial Cleanser - 8 fl oz bottle','price'=>7.99, 'img'=>'images/43.jpg'));
//$merge=array_merge($combined_sup1,$combined_sup2);
// now to combine both arrays
$combined_suppliers = array();
// foreach($merge as $c){
foreach ($combined_sup1 as $sup1 ) { // first loop supplier 1
$comb = array('id_sup1' => $sup1['id'],'product' => $sup1['product'],'price_sup1'=>$sup1['price'],'img'=>$sup1['img']);
foreach ($combined_sup2 as $sup2) { // second loop supplier 2
if ($sup2['id'] == $sup1['id']) { // if supplier 1 id = supplier 2 id
$comb["idsup2"]= $sup2['id'];
$comb["product"]= $sup2['product'];
$comb["price_sup2"]= $sup2['price'];
$comb["img"]= $sup2['img'];
break;
}
} // end second loop
$combined_suppliers[] = $comb;
} // END // first loop
// } // end merge loop
// print_r($combined_sup1);
// print_r($combined_sup2);
// print_r($merge);
print_r($combined_suppliers);
?>
更新以下是Wilhelm建议的工作代码
<?php
//array for supplier 1 data
$combined_sup1=array(
array('id'=>71,'product'=>'Irish Spring Deodorant Soap - 8ct','price'=>3.99, 'img'=>'images/71.jpg'),
array('id'=>14,'product'=>'L.A. Looks Sport Styling Gel 8 Oz','price'=>2.78, 'img'=>'images/14.jpg'),
array('id'=>43,'product'=>'Cetaphil Daily Facial Cleanser - 8 fl oz bottle','price'=>8.89, 'img'=>'images/43.jpg'));
// array for supplier 2 data
$combined_sup2=array(
array('id'=>21,'product'=>'Head and Shoulders- Dandruff Shampoo, 13.5 fl oz','price'=>5.94, 'img'=>'images/21.jpg'),
array('id'=>71,'product'=>'Irish Spring Soap - 8ct','price'=>3.39, 'img'=>'images/71.jpg'),
array('id'=>12,'product'=>'Colgate Total Toothpaste Advanced Whitening - 4 oz','price'=>3.59, 'img'=>'images/12.jpg'),
array('id'=>43,'product'=>'Cetaphil Daily Facial Cleanser - 8 fl oz bottle','price'=>7.99, 'img'=>'images/43.jpg'));
//merge both arrays of products into one array
$comb = array_merge($combined_sup2,$combined_sup1);
//make new clear array for results
$listed = [];
//iterate over each product
foreach ($comb as $item) {
//if product with same id is in result array, then...
if(array_key_exists($item['id'], $listed)){
//compare their prices
if($listed[$item['id']]['price'] > $item['price']){
//if price is lower than listed one, replace it
$listed[$item['id']] = $item;
}
} else {
//there is no product with this id, so add it.
$listed[$item['id']] = $item;
}
}
// print_r($combined_sup1);
// print_r($combined_sup2);
// print_r($merge);
print_r($listed);
?>
试试这样的方法
//merge both arrays of products into one array
$comb = array_merge($combined_sup2, $combined_sup1);
//make new clear array for results
$listed = [];
//iterate over each product
foreach ($comb as $item) {
//if product with same id is in result array, then...
if(array_key_exists($item['id'], $listed)){
//compare their prices
if($listed[$item['id']]['price'] > $item['price']){
//if price is lower than listed one, replace it
$listed[$item['id']] = $item;
}
} else {
//there is no product with this id, so add it.
$listed[$item['id']] = $item;
}
}
试试这样的
//merge both arrays of products into one array
$comb = array_merge($combined_sup2, $combined_sup1);
//make new clear array for results
$listed = [];
//iterate over each product
foreach ($comb as $item) {
//if product with same id is in result array, then...
if(array_key_exists($item['id'], $listed)){
//compare their prices
if($listed[$item['id']]['price'] > $item['price']){
//if price is lower than listed one, replace it
$listed[$item['id']] = $item;
}
} else {
//there is no product with this id, so add it.
$listed[$item['id']] = $item;
}
}
你为什么不比较价格呢?我不知道该怎么做。我尝试了很多不同的代码,但都失败了。我已经做了好几个小时了,一点运气都没有。你为什么不比较一下价格呢?@splash58我不知道该怎么做。我尝试了很多不同的代码,但都失败了。我已经干了好几个小时了,运气不好。谢谢!“我现在正在尝试,我会让你知道它是如何运作的。”弗朗西斯卡勒斯补充了一些评论,解释道:“谢谢!”!这比我的联合收割机工作得更好,但它仍然显示重复的产品ID。我必须从我的阵列中删除价格较高的产品ID。从您提供的输入中,我没有任何重复的ID。您能提供发生重复的数据吗?结果是数组“$listed”…啊!谢谢我的错误(:我刚刚在$listed上打印了一份报告,效果非常好。非常感谢威廉。我现在要删除你的答案。谢谢!我现在正在尝试,我会让你了解最新的结果。@francescalus添加了一些注释并解释道谢谢!这比我的联合收割机效果更好,但它仍然显示重复的产品ID。我必须告诉elim从我的数组中以更高的价格输入产品ID。我没有您提供的输入中的任何重复ID。您能提供发生重复的数据吗?结果是数组“$listed”…啊!谢谢!我的错误(:我刚刚打印了$listed,效果很好。非常感谢Wilhelm。我现在要删除您的答案。