返回PHP中带前导零的字符串

时间:2018-03-19 09:46:35

标签: php leading-zero

Similar to this unsolved question

我的PHP输出需要启用JSON_NUMERIC_CHECK,但是我的数据库中有一个字符串 nick 列,需要最初作为字符串返回。该列中的值可以包含数字,并且没有长度限制。代码示例:

$response["players"] = array();
...
$stmt = $connection->prepare('SELECT id, nick FROM players WHERE NOT id = ? ORDER BY nick');
$stmt->bind_param('i', $_POST["id"]);
$stmt->execute();
$result = $stmt->bind_result($id, $nick);
while ($stmt->fetch()) {
    $players = array();
    $players["id"] = $id;
    $players["nick"] = $nick;
    array_push($response["players"], $players);
}
...
echo json_encode($response, JSON_NUMERIC_CHECK);

例如,昵称“007”将作为“7”返回,我需要将其作为原始“007”。删除“JSON_NUMERIC_CHECK”有帮助,但它会破坏其余代码。像下面引用的 Strval()函数没有帮助。

$result = $stmt->bind_result($id, strval($nick));
$players["nick"] = strval($nick);

2 个答案:

答案 0 :(得分:1)

在PHP中,很遗憾没有明确的变量类型,这使得您的问题不那么容易解决。

我带来了2个解决方案。

1)如果您喜欢OOP,请创建一个Serializable, Arrayable类作为字符串的容器,并使用返回正确编码值的方法。

2)首先使用JSON_NUMERIC_CHECK进行编码,以确保您的数据符合您的预期,然后对已验证的数据进行解码,手动将字符串设置为其原始值,然后再次编码,但这次不使用JSON_NUMERIC_CHECK

$str = $response['nick'];
$response = json_decode(json_encode( $response, JSON_NUMERIC_CHECK ) );
$response->nick = $str;
$response = json_encode( $response );

答案 1 :(得分:0)

至少可以说数字管理很奇怪... 简直太恐怖了!

然后在PHPTESTER上:

$CUSTOMER['id'] = 123;

$CUSTOMER['tel'] = '06 06 06 06 06';
// unbug for zero top of tel number -> json_encode

$CUSTOMER['tel'] = "".$CUSTOMER['tel'].""; 

echo json_encode($CUSTOMER, JSON_NUMERIC_CHECK);

输出:{“ id”:123,“ tel”:“ 06 06 06 06 06”}

在我的主机上(相同的代码):输出:{“ id”:123,“ tel”:“ 6 06 06 06 06”}} //零被删除了!

我找到了一个不太可能的解决方案: 我在变量周围加了一个空格...

$CUSTOMER['tel'] = " ".$CUSTOMER['tel']." "; // wrap with spaces

输出(在我的主机上):{“ id”:123,“ tel”:“ 06 06 06 06 06”}

在PHP 5.5版中

这是一个解决方案,无论如何,我想征求您的意见。