Return PHP 中带前导零的字符串

Return string with leading zeros in PHP

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

例如,nick "007" 返回为 "7",我需要它是原始的 "007"。删除 "JSON_NUMERIC_CHECK" 有帮助,但它会使其余代码出现错误。 Strval() 如下引用的函数没有帮助。

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

不幸的是,在PHP中没有明确的变量类型,这使得你的问题不太容易解决。

我有 2 个解决方案。

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

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

号码的管理至少可以说是奇怪... 简直吓人!

然后 PHP测试者:

$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"} // 零被删除!

我找到了一个不太可能的解决方案: 我用 space ...

包围了变量
$CUSTOMER['tel'] = " ".$CUSTOMER['tel']." "; // wrap with spaces

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

在 PHP 版本 5.5

这是一个解决方案,我想听听您的意见,无论如何它对我有用。