当字段是PHP脚本中的特定类型时,如何输出不同的值类型?

时间:2017-01-01 07:39:12

标签: php

我开始理解php,因为我编写了更多代码,我遇到了一个尝试将数据输出为JSON的问题,其中字段ID被指定为varchar类型,但存储其中的值是混合字符串,整数和双精度。

这是我的数据库表的样子:

 map_type      map_value  
 -----------------------------
 link          www.google.com
 zoom          18
 lat           32.91
 long          -117.1

字段map_typemap_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'])

然而,输出是空白的,我开始意识到原因是因为它不存在。

我该如何解决这个难题?

1 个答案:

答案 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将浮点数视为整数。