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

时间:2008-12-11 20:10:44

标签: php pdo

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

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


编辑:

  • 我正在使用Zend Framework,我正在使用PDO_mysql。每列存储一个值,这是一个要求,所以我不能序列化它们。

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

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

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

4 个答案:

答案 0 :(得分:22)

您可以使用

$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);

答案 1 :(得分:1)

您是如何获取数据的? mysql,mysqli或PDO,其他一些方式甚至是其他一些数据库?

您可以array_map使用floatval,如下所示: $data = array_map('floatval', $data); 但是仍然会执行循环,我认为它假设您的数据中只有一列。

如果必须的话,你可能最好在使用你的价值时进行浮动。无论如何,php很可能会很好地解释它。

答案 2 :(得分:0)

大声笑......你在同一个项目我在做什么?

我刚刚完成(昨晚)在基于ZF的项目中创建了一些东西,它使用pdo_mysql来检索和格式化数据,然后将其输出为xml以便在flash片段中使用。值以字符串形式出现,但需要浮点数。 因为我也是编写获取数据的部分和创建数据库的人,所以我确保数据在进入数据库之前已转换为浮点数。

我只是将值转换为float作为其他格式的一部分,以实现它的价值。

protected function _c2f($input)
    {
        $input = (float)$input;
        $output = round(($input * 1.8) + 32, 2);

        return $output;
    }

答案 3 :(得分:-2)

不确定你在这里问的是什么?您可以使用(float) $string将字符串转换为浮点数,但由于PHP是动态类型的,因此无论如何都会在需要时发生。没有理由做一个明确的演员。

你在使用什么浮点值?

豫ICP备18024241号-1