1

「メソッド」と呼ばれる配列があり、次のようになります。

[0] => Array (
    [id] => WWAM
    [title] => WWAM
    [cost] => 4.35
    )
[1] => Array (
    [id] => CNQM
    [title] => CNQM
    [cost] => 5.21
    )
[2] => Array (
    [id] => CNAM
    [title] => CNAM
    [cost] => 6.58
    )

私がやりたいのは、[コスト] マイナス (分) [コスト] になるように各 [コスト] を変更することです。言い換えれば、以下の各値は 4.35 ずつ減少します (WWAN の値は 0 になります)。これにはおそらくもっと良い方法がありますが、array_walk を試すことにしました。しかし、それは私にとってはうまくいきません。これが私が試したことです:

      $lowestpricedoption = 100000;
      foreach ($methods as $item) {
        if ($item['cost'] < $lowestpricedoption) {
          $lowestpricedoption = $item['cost'];
        }
      }
      array_walk( $methods, 'subtractLowest', $lowestpricedoption );

      function subtractLowest(&$item, $key, $lowestval)
      {
        $item['cost'] -= $lowestval;
      }

なぜそれがうまくいかないのか知りたいのですが、もっとエレガントな方法もありがたいです。

4

1 に答える 1

1

順序内の値uasort()に従って配列をソートする PHP の関数を使用できます。そして、配列の逆参照とともに関数を使用するだけで、コストの最低値が得られますcostascendingcurrent()

uasort($arr, function($a,$b){
    return $a['cost'] - $b['cost'];
});
$min = current($arr)['cost'];
array_walk($arr,function(&$v,$k)use($min){
    $v['cost'] -= $min;
});
print_r($arr);

デモ

于 2015-10-29T07:25:38.850 に答える