Php 检查关联数组的特定键中是否存在重复值

Php 检查关联数组的特定键中是否存在重复值,php,arrays,associative-array,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

我有一个关联数组,它有两个相同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

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

$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/>';
}
$newArray=array();
foreach($main作为$key=>$val){
$newArray[$val['id'][]=$val['price'];
}
foreach($newArray作为$key=>$val){
排序($val,1);
回显'id:'.$key',Price='。内爆('-',$val)。'
; }
在阵列上循环并打印出相应的
id
价格
。不太确定你在用减价法做什么,但这会给你你所需要的

$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 />';
}
$array=array(array('price'=>3800,'id'=>40015),
数组('price'=>3700,'id'=>40001),
阵列('price'=>3800,'id'=>400015),
阵列('price'=>3300,'id'=>400018),
数组('price'=>3000,'id'=>400018),
数组('price'=>3100,'id'=>400020),
数组('price'=>3400,'id'=>400020));
asort($阵列);
foreach($key=>$value的数组)
{
回显'id:'.$value['id'.',Price='.$value['Price'.'。
; }
仅显示一点差异,并使用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($data,function($a,$b){return$a['price']]$b['price'];});
$maxPrices=array_列($data,'price,'id');
usort($data,function($a,$b){返回$b['price']$a['price'];});
$minPrices=array_列($data,'price,'id');
foreach($minPrices作为$id=>$minPrice){
echo'id:',$id',Price=',$minPrice',-',$maxPrices[$id],PHP_EOL;
}
这使用
usort()
以最高价格订购阵列(使用新的“spaceship”操作符);然后
array\u column()
创建一个id和max prices数组,如果存在匹配的id,那么价格将被前面的值覆盖,这样只有与每个
id
匹配的最高值保留在
$maxPrices
数组中;然后对最小值执行类似的操作

最后,循环遍历min数组,依次获取每个id和最小价格,并进行id查找以获得要显示的最大价格


请注意,如果array_列不支持,则使用spaceship操作符确实需要在下面使用PHP7

$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>';
        }
$arr=Array('0'=>Array('price'=>3800,'id'=>400015),
'1'=>数组('price'=>3700,'id'=>400015),
'2'=>阵列('price'=>3300,'id'=>400018),
'3'=>数组('price'=>3000,'id'=>400018),
'4'=>数组('price'=>3100,'id'=>400020),
'5'=>数组('price'=>3400,'id'=>400020),);
$new_arr=array();
foreach($arr作为$key=>$row){
如果(isset($new_arr[$row['id']])){
$new_arr[$row['id']]=$new_arr[$row['id']].-'.$row['price'];
}否则{
$new_arr[$row['id']]=$row['price'];
}
}
foreach($key=>$row的新数组){
回显'id:'.$key',Price='.$row.'
'; }
在循环中循环数组,并将元素作为Id的键和各自Id的Prince。这不是价格减法,我正在尝试将价格值从低到高排序。我编辑了我的帖子,现在它在打印之前按价格对数组排序。不仅仅是排序,我需要显示单个
id
的价格,它将按照它们在数组中的顺序返回值,但是,我需要对价格值进行排序too@VyshnaviSamudrala-在内爆之前,您可以在第二个循环中短取$val,以正确的顺序显示范围:$val=short($val,1)@VyshnaviSamudrala-我已经编辑了答案,您可以检查它以进行排序。现在它正在对数组中的每个值进行排序,不仅是具有相同id的值非常完美,而且,我必须对价格值进行排序以更新if语句:$new_arr[$row['id']=($new_arr[$row['id']]完美!非常感谢!