我从我的数据库中获取一个浮点数组,但我得到的数组已将值转换为字符串。
如何在不通过数组循环的情况下将它们再次转换为浮点数?
或者,如何从数据库中获取值而不将它们转换为字符串?
我正在使用Zend Framework,我正在使用PDO_mysql。每列存储一个值,这是一个要求,所以我不能序列化它们。
array_map('floatval', $array)
仅适用于单维数组。
我使用它时不能floatval
单个元素,因为我必须将数组传递给我的flash图表。
暂时的非通用解决方案是提取行并对每行执行array_map('floatval',$array)
。
答案 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);
但是仍然会执行循环,我认为它假设您的数据中只有一列。
答案 2 :(得分:1)
我找到了进行此操作的简便方法。 您可以通过在代码中添加foreach循环来做到这一点。 foreach循环用于一一读取数组字符串数据。然后,您可以简单地通过number_format函数对其进行转换。在转换为浮点值后,我使用了2位。即它用于在点值2位后打印值。
$example= array("12.20", "15.05", "55.70");
foreach($example as $float)
{
$update_value = number_format($float,2);
echo $update_value."<br>";
}
答案 3 :(得分:0)
大声笑......你在同一个项目我在做什么?
我刚刚完成(昨晚)在基于ZF的项目中创建了一些东西,它使用pdo_mysql来检索和格式化数据,然后将其输出为xml以便在flash片段中使用。值以字符串形式出现,但需要浮点数。 因为我也是编写获取数据的部分和创建数据库的人,所以我确保数据在进入数据库之前已转换为浮点数。
我只是将值转换为float作为其他格式的一部分,以实现它的价值。
protected function _c2f($input)
{
$input = (float)$input;
$output = round(($input * 1.8) + 32, 2);
return $output;
}
答案 4 :(得分:-2)
不确定你在这里问的是什么?您可以使用(float) $string
将字符串转换为浮点数,但由于PHP是动态类型的,因此无论如何都会在需要时发生。没有理由做一个明确的演员。
你在使用什么浮点值?