【问题标题】:Not Getting Max and Min Value for Money String Array没有获得货币字符串数组的最大值和最小值
【发布时间】:2012-09-05 01:21:56
【问题描述】:

这是我的数组

Array ( [0] => $30.00 [1] => $200.00 [2] => $138.00 [3] => $100.00 [4] => $30.00 
[5]=>$30.00 [6] => $30.00 )

试图从这个数组中获取最大值和最小值

echo $maxprice = max($list);
echo $minprice = min($list);

我得到最高 30.00 美元和最低 100.00 美元

我猜这是因为值是货币字符串。

谁能告诉我如何获得这个数组的真正最大值和最小值?这真的是钱串的原因吗?

提前致谢

注意 这个数组是从一个多维数组中剥离出来的。如果是普通数组,那就简单了

【问题讨论】:

  • 您是否尝试过使用非金钱价值?
  • @arxanas,这个数组是从一个多维数组中剥离出来的。非金钱价值有效,但我遇到了这种金钱字符串格式的问题
  • 由于“货币价值”不是“数字”字符串,因此在找到最小值/最大值时会进行字符串比较(参见数字比较)。这将按照$100.00, $138.00, $200.00, $30.00, $30.00, $30.00, $30.00 的顺序对它们进行排序(从最小值到最大值)。要获得您正在寻找的行为,它们实际上需要是数值或至少是数字字符串(即没有$)。从数组中获取数字字符串的方法有很多种。
  • @salathe 谢谢!我真的认为其中涉及很多代码:)

标签: php arrays max min


【解决方案1】:

删除“$”符号以确保 php 将值视为数字

【讨论】:

  • 我将值从一个多维数组存储到这个数组中。您能告诉我如何将其转换为普通数字吗?
  • 这绝对让我看起来很傻哈哈.. 我真的认为你需要通过步骤将货币字符串转换为数字。没想到这么简单-_-
【解决方案2】:

您需要在数组中使用十进制值(不带“$”)。美元符号应仅在输出到显示时应用。

要将字符串转换为浮点数,您只需 array_walk() 数组即可。

如果在 PHP 5.3 或更高版本上,我喜欢使用这样的闭包

array_walk($array, function (&$value, $key) {
   $value = (float)ltrim($value, '$');
});

如果在旧版本的 PHP 中,您需要定义一个单独的函数并像这样在 array_walk 中调用该函数

array_walk($array, 'strip_dollar_signs');

function strip_dollar_signs (&$value, $key) {
    $value = (float)ltrim($value, '$');
}

然后像往常一样对数组进行排序

sort($array, SORT_NUMERIC);

【讨论】:

  • 我将值从一个多维数组存储到这个数组中
  • 您能告诉我如何将其转换为数字吗?
  • 那么,您的数组实际上是字符串值吗? (即"$30.00" 不是$30.00
  • @jsmoove88 查看修改后的答案。
【解决方案3】:

考虑仅存储数值,除非您使用多种货币。 此代码应该为您提供最小值和最大值

$copy = $list;
foreach($copy as $key=>$value)$copy[$key] = str_replace('$', '', $value);

echo $maxprice = max($copy);
echo $minprice = min($copy);

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多