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、低価格はであり、低価格は3などです。これを自動化する方法についてのアイデア。id=22

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価格として扱われます。
  • 価格は無制限で、3 つに制限されていません。
  • 配列に格納されている他のデータは、配列に影響を与えたり、何かを壊したりしません。たとえば、将来descriptionキーを追加した場合、コードに影響を与えたり、変更を必要としたりすることはありません。
于 2013-10-01T08:25:25.457 に答える
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 に答える
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 に答える
-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 に答える