我开始理解php,因为我编写了更多代码,我遇到了一个尝试将数据输出为JSON的问题,其中字段ID被指定为varchar
类型,但存储其中的值是混合字符串,整数和双精度。
这是我的数据库表的样子:
map_type map_value
-----------------------------
link www.google.com
zoom 18
lat 32.91
long -117.1
字段map_type
和map_value
的类型为varchar
。
我写了一些简单的代码来输出数据:
$sql = "select map_type, map_value from table";
$q = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
//create an array
$jsonData = array();
while($row = mysqli_fetch_assoc($q))
{
$jsonData[$row['map_type']] = $row['map_value'];
}
echo json_encode($jsonData);
获得输出:
{
"link": "www.google.com",
"zoom": "8",
"lat": "32.91",
"long": "-117.1",
}
从map_value
可以看出,有混合字符串,整数和双精度。
在阅读时,我知道mysqli_fetch_assoc
仅将数据作为字符串输出,因此我必须明确指定我想要的任何字段值的返回类型值。
但是,即使字段map_value
的类型为varchar
,我如何指定不同的返回类型值?
为了表明我的意思,我怎样才能产生这个输出,其中" link"将是一个字符串," zoom"将是一个int,并且" lat"的值和"长"将是双打
{
"link": "www.google.com",
"zoom": 8,
"lat": 32.91,
"long": -117.1,
}
在尝试学习PHP时,到目前为止我尝试过这样做:
1。在将数据存储到数组中之前添加以下代码:
`$row['map_value'] = doubleval($row['map_value']);`.
然而,非常明显的是," link"返回 0 ,因为它尝试将字符串转换为double。
2。我还尝试过这样的事情:
$row['zoom'] = intval($row['zoom'])
$row['lat'] = doubleval($row['lat'])
$row['long'] = doubleval($row['long'])
然而,输出是空白的,我开始意识到原因是因为它不存在。
我该如何解决这个难题?
答案 0 :(得分:3)
您正在寻找的功能是floatval
。
您还可以使用is_numeric()
来测试字符串是否与数字相符。
while($row = mysqli_fetch_assoc($q))
{
$value = is_numeric($row['map_value']) ? floatval($row['map_value']) : $row['map_value'];
$jsonData[$row['map_type']] = $value;
}
没有必要选择是否致电floatval()
或intval()
。 PHP将浮点数视为整数。