Как кодировать в JSON-кодированный массив из непоследовательного массива - PullRequest
1 голос
/ 22 января 2010

Используя CakePHP (на PHP 5.2.6), я делаю список запросов к таблице, которая возвращает массив вроде:

Массив (

[0] => None
[3] => Value 1
[5] => Value 2

)

Поскольку это не последовательный массив, json_encode () кодирует его в объект, а не в массив JSON, который мне нужен для заполнения Jeditable Select.

PHP 5.2.6 не поддерживает никаких дополнительных параметров, поэтому я не могу заставить его создать JSON-кодированный массив.

Мой вопрос, кто-нибудь знает, как я могу решить эту проблему чистым способом?

Ответы [ 2 ]

5 голосов
/ 22 января 2010

см. http://docs.php.net/array_values:

array_values ​​() возвращает все значения из входного массива и численно индексирует массив.

, например

$a = array(
  0 => 'None',
  3 => 'Value 1',
  5 => 'Value 2'
);
$x = array_values($a);
print_r($x);
echo json_encode($x);

печать

Array
(
    [0] => None
    [1] => Value 1
    [2] => Value 2
)
["None","Value 1","Value 2"]

edit: в массивах Javascript не должно быть пробелов. Вы должны были бы заполнить недостающие элементы, например, NULL.

$a = array(
  0 => 'None',
  3 => 'Value 1',
  5 => 'Value 2'
);

$na = array_pad(array(), max(array_keys($a)), null);
$a += $na;
ksort($a);
echo json_encode($a);

отпечатков ["None",null,null,"Value 1",null,"Value 2"]

2 голосов
/ 22 января 2010

Если вы хотите сохранить индексы, вам нужно использовать объект. Если нет, передайте его через array_merge, чтобы переиндексировать массив.

www.php.net / array_merge

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...