PHP检索2D关联数组中的最小值

时间:2013-10-01 08:05:09

标签: php arrays

我有以下数组:

Array
  (
    [0] => Array
        (
                [id] => 1
                [price1] => 16
                [price2] => 10
                [price3] => 3
        )

    [1] => Array
        (
            [id] => 2
            [price1] => 19
            [price2] => 2
            [price3] => 6
        )

    [2] => Array
        (
            [id] => 3

            [price1] => 14
            [price2] => 32
            [price3] => 1
        )

)

我想从每一行获得与其他行无关的较低价格。例如,对于id=1,较低的价格为3,对于id=2,较低的价格为2,依此类推。任何想法如何自动化。

5 个答案:

答案 0 :(得分:1)

可能的解决方案:

Demo

foreach($array as $item)
{
    $lowestKey = '';
    foreach($item as $key => $value)
    {
        if(strpos($key, 'price') === 0)
        {
            if($lowestKey == '')
            {
                $lowestKey = $key;
            }
            else
            {
                if($value < $item[$lowestKey])
                {
                    $lowestKey = $key;
                }
            }
        }
    }

    echo 'lowest for id ' . $item['id'] . ': ' . $item[$lowestKey];
}

这种方法的好处是:

  • 价格键不必是连续的,甚至不是数字的。任何以price开头的密钥都会被视为价格。
  • 价格可以无限制,不限于三个。
  • 存储在数组中的任何其他数据都不会影响它或破坏任何内容。因此,例如,如果将来添加了description密钥,则不会影响代码或需要进行任何修改。

答案 1 :(得分:0)

试试这个:

$newarray = array();
foreach ($array as $row)
{
    $id = $row['id'];
    unset($row['id']);
    $newarray[$id] = min($row);
}

你去吧。 $newarray现在包含每行的id => {lowest value}

答案 2 :(得分:0)

$r = array_reduce($array, function(&$result, $item) {

    $key = $item['id'];
    unset($item['id']);
    $result[$key] = min($item);
    return $result;

});

答案 3 :(得分:0)

尝试以下方法:

$prices = array(0 => array ( 'id' => 1,
                         'price1' => 16,
                         'price2' => 10,
                         'price3' => 3
                        ),

            1 => array ( 'id' => 2,
                         'price1' => 19,
                         'price2' => 2,
                         'price3' => 6
                ),

            2 => array ( 'id' => 3,
                         'price1' => 14,
                         'price2' => 32,
                         'price3' => 1
                )

    );



foreach($prices as $price) {
    $tmp_arr = array(0=> $price['price1'], 1=> $price['price2'], 2=> $price['price3']);
    sort($tmp_arr);
    $arr_low_price = array('id'=> $price['id'], 'low_price' => $tmp_arr[0]);
    print_r($arr_low_price);
    echo '<br />';
}

答案 4 :(得分:-1)

尝试可能有所帮助:

$price  = array();
foreach( $array as $key=>$each ){
    $low    = $each['price1'];
    if( $each['price2'] < $low ){
        $low    = $each['price2'];
    }
    if( $each['price3'] < $low ){
        $low    = $each['price3'];
    }
    $price[$key]    = $low;
}

print_r( $price );