Я знаю, как получить строку mysql и преобразовать ее в json:
$row = mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM table WHERE id=1")); echo json_encode($row); // it's an ajax-call
но:
db-row имеет разные типы, такие как int, float, string. путем преобразования его с помощью json_encode () все результаты являются строками.
Есть ли лучший способ исправить типы, чем это:
$row['floatvalue1'] = 0+$row['floatvalue1']; $row['floatvalue2'] = 0+$row['floatvalue2']; $row['intvalue1'] = 0+$row['intvalue1'];
Я хотел бы пройти через клавиши и добавить 0, потому что:
но я не могу, потому что:
Спасибо заранее и извините мой плохой английский 🙂
EDIT (ответить на вопрос-вопрос от Казимира и Ипполита):
Я называю этот php-код, используя ajax, чтобы получить динамически sql-значения. в моем javascript-коде я использую следующие результаты:
result['intvalue1'] += 100;
скажем, json-результат intval1 равен 50, вычисленный результат:
«50100», а не 150
Приведенный ниже код является лишь доказательством концепции. Он нуждается в инкапсуляции в функции / методе и некоторой полировке перед ее использованием в процессе производства (fe вызовите mysqli_fetch_field()
в цикле и сохраните возвращаемые им объекты перед обработкой любой строки, а не раз для каждой строки).
Он использует функцию mysqli_fetch_field()
для получения информации о каждом столбце результирующего набора и преобразует в номера столбцы с числовыми типами. Значения констант MYSQLI_TYPE_*
можно найти на странице документации предопределенных констант Mysqli .
// Get the data $result = mysqli_query($db, "SELECT * FROM table WHERE id=1"); $row = mysqli_fetch_assoc($result); // Fix the types $fixed = array(); foreach ($row as $key => $value) { $info = mysqli_fetch_field($result); if (in_array($info->type, array( MYSQLI_TYPE_TINY, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_INT24, MYSQLI_TYPE_LONG, MYSQLI_TYPE_LONGLONG, MYSQLI_TYPE_DECIMAL, MYSQLI_TYPE_FLOAT, MYSQLI_TYPE_DOUBLE ))) { $fixed[$key] = 0 + $value; } else { $fixed[$key] = $value; } } // Compare the results echo('all strings: '.json_encode($row)."\n"); echo('fixed types: '.json_encode($fixed)."\n");
что-то вроде
$row['floatvalue1'] = reset( sscanf ( $row['floatvalue1'] , "%f" )); $row['floatvalue2'] = reset( sscanf ( $row['floatvalue2'] , "%f" )); $row['intvalue1'] = reset( sscanf ( $row['intvalue1'] , "%d" )); json_encode($row);
Если вы просто пытаетесь убедиться, что ваши значения работоспособны по отношению к их типу, вам нужно сначала правильно нарисовать их тип.
Если вам не нужны серверные серверы, я просто передам json прямо в интерфейс и выполняю там работу.
В Javascript вы можете попытаться отличить числа так:
function tryNumber(string){ return !isNaN( parseInt(string) ) ? parseInt(string) : string; } function tryDate(string){ return !isNaN( new Date(string).getTime() ) ? new Date(string) : string; } tryNumber('foo'); // "hello" tryNumber('24'); // 24 tryDate('bar'); // "bar" tryDate('December 17, 1995'); // "Sun Dec 17 1995 00:00:00 GMT+0000 (GMT)"
Эти две строки пытаются передать значения как Date / Number . Если они не могут быть брошены, они останутся String .