Я закодировал массив, который я сделал, используя встроенный json_encode();
функция. Мне нужно это в формате массива массивов, например:
[["Afghanistan",32,12],["Albania",32,12]]
Однако он возвращается как:
["2":["Afghanistan",32,12],"4":["Albania",32,12]]
Как удалить эти номера строк без использования каких-либо трюков Regex?
Если ключи массива в вашем массиве 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 порядок будет упорядочен по возрастанию.
Например:
[ 3 => 'a', 2 => 'b', 1 => 'c', 0 => 'd' ]
Вернется:
{ 0: 'd', 1: 'c', 2: 'b', 3: 'a' }
Таким образом, решение в этом случае – использовать array_reverse
перед его кодировкой json
Если вы не укажете индексы в своем начальном массиве, вы получите регулярные числовые. Массивы должны иметь некоторую форму уникального индекса