Функция scanf()
автоматически удаляет пробелы, прежде чем пытаться проанализировать преобразования, отличные от символов. Исключение составляют форматы символов (в основном %c
, а также наборы сканирования %[…]
- и %n
); они не удаляют пробелы.
Используйте " %c"
с ведущим пробелом, чтобы пропустить дополнительное пустое пространство. Не используйте конечную заготовку в строке формата scanf()
.
Обратите внимание, что это все еще не потребляет никаких конечных пробелов, оставшихся во входном потоке, даже до конца строки, поэтому остерегайтесь что если также использовать getchar()
или fgets()
в том же входном потоке. Мы просто получаем scanf, чтобы пропускать пробелы до , например, для %d
и других несимвольных преобразований.
Обратите внимание, что не-пробелы " директивы "(использовать терминологию POSIX scanf ), отличную от преобразований, например, буквальный текст в scanf("order = %d", &order);
также не пропускает пробелы. Литерал order
должен соответствовать следующему символу, который нужно прочитать.
Итак, вы, вероятно, захотите " order = %d"
там, если хотите пропустить новую строку из предыдущей строки, но по-прежнему требуется литеральное совпадение на фиксированном string, как этот вопрос .
Если ключи массива в вашем массиве PHP не являются последовательными числами, json_encode()
должны сделать другой объект конструкцией, так как массивы JavaScript всегда последовательно индексируются по цифре. Используйте array_values()
внешнюю структуру PHP, чтобы отменить исходные ключи массива и заменить их нулевой последовательной нумерацией:
// Non-consecutive number keys are OK for PHP
// but not for a JavaScript array
$array = array(
2 => array("Afghanistan",32,13),
4 => array("Albania",32,12)
);
// array_values() removes the original keys and replaces
// with plain consecutive numbers
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]
json_encode () поможет вам закодировать массив на JSON в php.
, если вы будете использовать только функцию json_encode напрямую без какой-либо конкретной опции, она вернет массив. Как упоминается выше вопрос
$array = array(
2 => array("Afghanistan",32,13),
4 => array("Albania",32,12)
);
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]
Поскольку вы пытаетесь преобразовать Array в JSON, тогда я бы предложил использовать JSON_FORCE_OBJECT в качестве дополнительной опции (параметров) в json_encode, как ниже
<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"}
?>
Я хочу добавить к ответу Майкла Берковски, что это также может произойти, если порядок массива будет отменен, и в этом случае немного сложнее наблюдать эту проблему, потому что в объекте json порядок будет упорядочен по возрастанию.
Например:
[
3 => 'a',
2 => 'b',
1 => 'c',
0 => 'd'
]
Вернет:
{
0: 'd',
1: 'c',
2: 'b',
3: 'a'
}
Таким образом, решение в этом случае должно использовать array_reverse
перед его кодировкой json
Общее использование JSON - это чтение данных с веб-сервера и отображение данных на веб-странице.
В этой главе рассказывается, как обмениваться данными JSON между клиентом и сервером PHP .
PHP имеет некоторые встроенные функции для обработки JSON.
Объекты в PHP могут быть преобразованы в JSON с помощью функции PHP json_encode ():
<?php
$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Если вы не укажете индексы в своем начальном массиве, вы получите регулярные числовые. Массивы должны иметь какой-то уникальный индекс