为了账号安全,请及时绑定邮箱和手机立即绑定

如果数组列中有几条具有相同值的记录 - 取另一列最小值的一条记录

如果数组列中有几条具有相同值的记录 - 取另一列最小值的一条记录

PHP
茅侃侃 2021-09-18 17:12:56
我有多维数组看起来像这样:Array3: [    0 => array:2 [            model_id => 1            price => 2000         ]          1 => array:2 [            model_id => 2            price => 3000         ]    2 => array:2 [            model_id => 1            price => 1500         ]   ]现在我需要检查 model_id 的值是否出现不止一次,如果是,我需要在价格值较低的地方使用这个。在这个例子中,我有两次 model_id = 1 所以我应该选择第二个,因为价格最低。我怎样才能做到这一点?但我仍然无法解决这个问题。结果数组应如下所示:Array2: [    0 => array:2 [            model_id => 2            price => 3000         ]    1 => array:2 [            model_id => 1            price => 1500         ]   ]
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您可以利用关联数组键来强制唯一性并比较价格:


<?php

// Our data

$array = [

    [ 'model_id' => 1, 'price' => 2000 ],

    [ 'model_id' => 2, 'price' => 3000 ],

    [ 'model_id' => 1, 'price' => 1500 ]

];


// Store the final result

$result = [];


// Loop the data

foreach( $array as $v )

{

    // If this model_id has not been encountered or if the price is lower than what's stored then make it the new price

    if( !isset( $output[ $v[ 'model_id' ] ] ) || $v[ 'price' ] < $output[ $v[ 'model_id' ] ][ 'price' ] )

    {

        $output[ $v[ 'model_id' ] ] = $v;

    }

}


// Get rid of the unique keys

$output = array_values( $output );


print_r( $output );

输出:


Array

(

    [0] => Array

        (

            [model_id] => 1

            [price] => 1500

        )


    [1] => Array

        (

            [model_id] => 2

            [price] => 3000

        )


)


查看完整回答
反对 回复 2021-09-18
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您可以按降序排序price,然后提取和索引,model_id以便最后一个(price每个model_id索引的最低值)将覆盖其他:


array_multisort(array_column($array, 'price'), SORT_DESC, $array);

$result = array_column($array, null, 'model_id');


查看完整回答
反对 回复 2021-09-18
?
12345678_0001

TA贡献1802条经验 获得超5个赞

您可以使用 usort 数组函数获取第一个最小值记录,然后使用临时数组并运行 foreach 函数来删除重复记录。


下面的代码对我来说工作正常。


<?php



$arr = array(

        [   

            'model_id' => 1,

            'price' => 2000

        ],

        [

            'model_id' => 2,

            'price' => 3000

        ],

        [

            'model_id' => 1,

            'price' => 1500

        ]

    );


    usort($arr, function ($a, $b) {

        return $a['price'] - $b['price'];

    });


    $input = $arr;

    $temp  = array();

    $keys  = array();


    foreach ( $input as $key => $data ) {

        unset($data['price']);

        if ( !in_array($data, $temp) ) {

            $temp[]     = $data;

            $keys[$key] = true;

        }

    }


    $output = array_intersect_key($input, $keys);


    print_r($output);



查看完整回答
反对 回复 2021-09-18
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信