У меня есть массив под названием «методы», и это выглядит так:
[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 (тогда WWAM будет равен нулю). Возможно, есть лучший способ сделать это, но я решил попробовать 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;
}
Я отчасти хочу знать, почему это не работает, но я также был бы признателен за более элегантный метод.
Ты можешь использовать uasort()
функция PHP, которая будет сортировать ваш массив в соответствии с вашими cost
значение в ascending
порядок. А потом просто использовать current()
функционировать вместе с разыменованием массива, и вы получите самое низкое значение стоимости
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);
Других решений пока нет …