Как отформатировать числа на многомерных массивах в php? - PullRequest
1 голос
/ 28 сентября 2019

Извините, мой вопрос, вероятно, простой, но я не знаю PHP, и после нескольких часов серфинга в сети я не смог заставить его работать: /

Я занимаюсь веб-сайтомсо списком цен, которые я поместил в массив:

$priceList = [
    "teaTowel" => [
        "calm500"   => 2.75,    "active500" => 3.25,
        "calm300"   => 3.15,    "active300" => 3.65,
        "calm150"   => 3.50,    "active150" => 4.00,
        "calm50"    => 3.90,    "active50"  => 4.40
    ],
    "apronChild" => [
        "calm500"   => 3.30,    "active500" => 3.45,
        "calm300"   => 3.70,    "active300" => 3.85,
        "calm150"   => 4.20,    "active150" => 4.35,
        "calm50"    => 4.90,    "active50"  => 5.05
    ]
];

Мне удалось их отобразить (ууу!), вот так:

<p>Price: <?php echo $priceList['apronChild']['calm500'] ?> &euro;</p>

Проблема в том, что я хотел бынравится форматировать цены так, чтобы они отображались с запятой вместо точки и двумя десятичными знаками.Как «3,30» вместо «3,3»

Но я не могу заставить функцию format_number работать с моим массивом: /

Я пробовал бесконечные варианты этого:

$priceListFormat = array_map(function($num){return number_format($num, 2, ',', ' ');}, $priceList);

<p>Price: <?php echo $priceListFormat['apronChild']['calm500'] ?> &euro;</p>

Но нет никакого способа обойти это, я ничего не знаю о php, и я вроде как спотыкаюсь здесь в темноте ^^ Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Если ваш массив содержит только цены, вы можете использовать array_walk_recursive(), который будет обрабатывать все конечные узлы массива.Затем просто отформатируйте каждое значение и замените существующее значение на него ...

array_walk_recursive($priceList, function(&$price) 
                {$price = number_format($price, 2, ',', ' ');});
1 голос
/ 28 сентября 2019

Вы не можете сделать это с array_map(), потому что он не возвращает ассоциативный массив.Вы должны использовать вложенные циклы.

$priceListFormat = [];
foreach ($priceList as $k1 => $v1) {
    $r1 = [];
    foreach ($v1 as $k2 => $v2) {
        $r1[$k2] = number_format($v2, 2, ',', ' ');
    }
    $priceListFormat[$k1] = $r1;
}
...