Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-组合两个数组并将供应商id1映射到供应商id2_Php_Arrays - Fatal编程技术网

PHP-组合两个数组并将供应商id1映射到供应商id2

PHP-组合两个数组并将供应商id1映射到供应商id2,php,arrays,Php,Arrays,我正在研究一个数组,它涉及产品ID的组合和映射 我有两个供应商,其同一产品的id相同,价格不同,特定id的名称略有不同。我只想显示为特定id(产品)提供最佳价格的供应商,每当两个阵列具有相同的产品id时。我希望显示每个可用产品,仅消除重复项,并仅显示具有最佳价格的产品 我的代码有问题,不知道怎么做 下面是我的代码。请注意,我为供应商1和供应商2制作了一个数组,而不是从数据库中提取它;所以你们可以把它复制到IDE上进行调试 <?php //array for supplier 1 data

我正在研究一个数组,它涉及产品ID的组合和映射

我有两个供应商,其同一产品的id相同,价格不同,特定id的名称略有不同。我只想显示为特定id(产品)提供最佳价格的供应商,每当两个阵列具有相同的产品id时。我希望显示每个可用产品,仅消除重复项,并仅显示具有最佳价格的产品

我的代码有问题,不知道怎么做

下面是我的代码。请注意,我为供应商1和供应商2制作了一个数组,而不是从数据库中提取它;所以你们可以把它复制到IDE上进行调试

<?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。我现在要删除您的答案。