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
这是一个解决方案,我想听听您的意见,无论如何它对我有用。
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
这是一个解决方案,我想听听您的意见,无论如何它对我有用。