如何在 php 中格式化多维数组上的数字?

Posted

技术标签:

【中文标题】如何在 php 中格式化多维数组上的数字?【英文标题】:How to format numbers on multidimensional arrays in php? 【发布时间】:2019-09-28 14:28:39 【问题描述】:

对不起,我的问题可能很简单,但我不懂 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一无所知,我在这里有点在黑暗中磕磕绊绊^^ 感谢您的帮助!

【问题讨论】:

欢迎来到 SO!问题可能更清楚——如果唯一的问题是数字格式,并且您可以操作数组,我建议删除所有数组代码并只关注格式问题。谢谢。 【参考方案1】:

您不能对array_map() 执行此操作,因为它不会返回关联数组。你必须使用嵌套循环。

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

【讨论】:

嗯,试过了,但我收到一堆错误:警告:第 28 行的 C:\wamp\www\pegasus\include\pricelist.php 中为 foreach() 提供的参数无效 糟糕,我以为是 3 维的。给我一分钟【参考方案2】:

如果您的数组只包含价格,那么您可以使用array_walk_recursive(),它将只处理数组的所有叶节点。然后只需格式化每个值并用它替换现有值...

array_walk_recursive($priceList, function(&$price) 
                $price = number_format($price, 2, ',', ' '););

【讨论】:

对不起,我无法让你的提议生效...... :) 我真的很讨厌 php ^^ 无论如何谢谢! 由于这会更新数组,您可能需要将数组复制到$priceListFormat,然后将代码应用于该数组,或者只需将输出引用更改为$priceList

以上是关于如何在 php 中格式化多维数组上的数字?的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP 多维数组中检索值

如何在PHP中将多维数组过滤到另一个?

多维数组上的 json_encode() - 带有字符串键

具有未知键数的多维数组上的PHP Array_intersect

数据库中数据写入多维数组,如何实现?

在 PHP 中递归创建多维数组