Возвращает строку с ведущими нулями в переполнении стека

Похоже на этот нерешенный вопрос

Мой вывод PHP требует JSON_NUMERIC_CHECK включен, однако есть одна строка Ник столбец в моей базе данных, который должен быть возвращен в виде строки. Значения в этом столбце могут содержать числа без ограничения длины. Пример кода:

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

1

Решение

В PHP, к сожалению, нет явного типа для переменных, это делает вашу проблему не такой простой для решения.

Я пришел с 2 решением.

1) если вам нравится ООП, сделайте 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]