2

我有以下数组:

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较低的价格是3id=2较低的价格2等等。任何想法如何自动化这个。

4

5 回答 5

1

可能的解决方案:

演示

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密钥,它不会影响代码或需要任何修改。
于 2013-10-01T08:25:25.457 回答
0
$r = array_reduce($array, function(&$result, $item) {

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

});
于 2013-10-01T08:37:03.060 回答
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 />';
}
于 2013-10-01T08:37:36.807 回答
0

尝试这个:

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

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

于 2013-10-01T08:15:30.910 回答
-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 );
于 2013-10-01T08:09:39.353 回答