代码之家  ›  专栏  ›  技术社区  ›  markus

如何将数组的所有值转换为PHP中的浮点值?

  •  6
  • markus  · 技术社区  · 16 年前

    我正在从数据库中提取一个浮点数组,但我得到的数组已将值转换为字符串。

    如何在不循环数组的情况下将它们再次转换为浮点?
    或者,如何在不将值转换为字符串的情况下从数据库中获取值?


    编辑:

    • 我使用的是Zend框架,我使用的是PDO MySQL。每个列存储一个值,这是一个要求,因此我无法序列化它们。

    • array_map('floatval', $array) 仅适用于一维数组。

    • 我不能 floatval 当我使用单个元素时,因为我必须将数组传递给我的闪存图表。

    • 暂时的非通用解决方案是提取行并执行 array_map('floatval',$array) 每行。

    4 回复  |  直到 16 年前
        1
  •  22
  •   Greg    16 年前

    你可以使用

    $floats = array_map('floatval', $nonFloats);
    

    有选择权 PDO::ATTR_STRINGIFY_FETCHES 但据我所知,MySQL总是 true

    编辑:参见 Bug 44341 这证实了MySQL不支持关闭Stringify。

    编辑:您还可以映射这样的自定义函数:

    function toFloats($array)
    {
        return array_map('floatval', $array);
    }
    
    $data = array_map('toFloats', $my2DArray);
    
        2
  •  1
  •   Kris    16 年前

    你是如何获取数据的?mysql,mysqli或者pdo,其他方式或者甚至其他数据库?

    你可以使用 array_map 具有 floatval 像这样: $data = array_map('floatval', $data); 但它仍然执行一个循环,我认为它假定您的数据中只有一列。

    如果必须这样做的话,当你使用你的值时,你可能是最好的浮动类型。无论如何,PHP很可能会很好地解释它。

        3
  •  0
  •   rg88    16 年前

    大声笑。。。你在做和我一样的项目吗?

    我刚刚(昨晚)在一个基于ZF的项目中创建了一些东西,它使用pdo-mysql来检索和格式化数据,然后将其输出为XML以在闪存中使用。值作为字符串输入,但需要是浮动的。 因为我也是编写获取数据的部分的人,也是创建数据库的人,所以我只是确保在数据进入数据库之前将其转换为float。

    我只是简单地将值转换为浮点值,作为其他格式的一部分,这是值得的。

    protected function _c2f($input)
        {
            $input = (float)$input;
            $output = round(($input * 1.8) + 32, 2);
    
            return $output;
        }
    
        4
  •  -2
  •   troelskn    16 年前

    不知道你在问什么?可以使用 (float) $string 但是,由于PHP是动态类型的,所以在需要时,这种情况仍然会发生。没有理由进行显式转换。

    您使用浮点值的目的是什么?