检查关联数组的特定键中的重复值

时间:2016-08-10 12:18:48

标签: php arrays associative-array

我有一个关联数组,有两个不同的价格和相同的ID。 让它成为......

Array ( [0] => Array ( [price] => 3800 [id] => 400015 )  
        [1] => Array ( [price] => 3700 [id] => 400015 )
        [2] => Array ( [price] => 3300 [id] => 400018 )
        [3] => Array ( [price] => 3000 [id] => 400018 )
        [4] => Array ( [price] => 3100 [id] => 400020 )
        [5] => Array ( [price] => 3400 [id] => 400020 ))

我需要将它们显示为

 id:400015, Price=3800-3700
 id:400018, Price=3000-3600
 id:400020, Price=3100-3400

4 个答案:

答案 0 :(得分:3)

如果array_column不支持

,请使用以下代码
$arr = Array ( '0' => Array ( 'price' => 3800, 'id' => 400015 )  ,
        '1' => Array ( 'price' => 3700, 'id' => 400015 ),
        '2' => Array ( 'price' => 3300, 'id' => 400018 ),
        '3' => Array ( 'price' => 3000, 'id' => 400018 ),
        '4' => Array ( 'price' => 3100, 'id' => 400020 ),
        '5' => Array ( 'price' => 3400, 'id' => 400020 ),);

        $new_arr =array();
        foreach($arr as $key=>$row){
            if(isset($new_arr[$row['id']])){
                $new_arr[$row['id']]= $new_arr[$row['id']].'-'.$row['price'];
            }else{
                $new_arr[$row['id']]=$row['price'];
            }
        }

        foreach($new_arr as $key=>$row){
            echo 'id:'.$key.', Price = '.$row.'<br>';
        }

答案 1 :(得分:2)

您可以循环数组并创建新数组,这将很容易创建您想要显示的输出

$newArray = array();
foreach($main as $key=>$val){
    $newArray[$val['id']][] = $val['price'];
}

foreach ($newArray as $key=>$val){
    sort($val,1);
    echo 'id: '.$key.', Price='.implode('-', $val).'<br/>';
}

答案 2 :(得分:1)

在数组上循环并打印出相应的idprice。不太清楚你在做什么减价,但这应该给你你需要的东西。

$array = array(array('price'=>3800, 'id'=>40015),
               array('price'=>3700 , 'id'=>40001),
               array('price'=>3800, 'id'=>400015),
               array('price'=>3300 , 'id'=>400018),
               array('price'=>3000 , 'id'=>400018),
               array('price'=>3100 , 'id'=>400020),
               array('price'=>3400 , 'id'=>400020));

asort($array);

foreach ($array as $key => $value)
{
    echo 'id: '.$value['id'].', Price='.$value['price'].'<br />';
}

答案 3 :(得分:1)

只是为了显示一点方差,并使用PHP7功能:

usort($data, function($a, $b) { return $a['price'] <=> $b['price']; });
$maxPrices = array_column($data, 'price', 'id');

usort($data, function($a, $b) { return $b['price'] <=> $a['price']; });
$minPrices = array_column($data, 'price', 'id');

foreach($minPrices as $id => $minPrice) {
    echo 'id:', $id, ', Price=', $minPrice, '-', $maxPrices[$id], PHP_EOL;
}

这使用usort()按最高价格对阵列进行排序(使用新的&#34;太空船&#34;运算符);然后array_column()创建一系列ID和最高价格,如同匹配的ID一样,那么价格将被之前的值覆盖,以便只有最高值匹配{{1} 1}}保留在id数组中;然后对最小值做同样的事情。

最后,循环迭代min数组,依次获取每个id和最小价格,并进行id查找以获得最高价格

Demo

请注意,使用太空船运营商需要PHP7