2013-10-11 4 views
4

Как видно из названия государств, я пытаюсь использовать Typeahead.js Bootstrap, и это требует JSON строку, как этотPHP/jQuery - Как преобразовать многомерный массив PHP в строку JSON?

var subjects = ['PHP', 'MySQL', 'SQL', 'PostgreSQL', 'HTML', 'CSS', 'HTML5', 'CSS3', 'JSON']; 

Но у меня есть многомерный массив, который при делает json_encode возвращает следующий

[{"username":"Test1"},{"username":"Test2"},{"username":"Test3"},{"username":"Test4"},{"username":"Test5"},{"username":"Test6"}] 

Typeahead.js выдает ошибки при попытке использовать этот массив.

Как бы преобразовать многомерное изображение в качестве примера?

Оригинал PHP массив

Array 
(
[0] => Array 
    (
     [username] => Test1 
    ) 

[1] => Array 
    (
     [username] => Test2 
    ) 

[2] => Array 
    (
     [username] => Test3 
    ) 

[3] => Array 
    (
     [username] => Test4 
    ) 

[4] => Array 
    (
     [username] => Test5 
    ) 

[5] => Array 
    (
     [username] => Test6 
    ) 

) 

Desired outcome would be 

var subjects = ['Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6']; 
+2

json_encode()? – sircapsalot

+0

Структура массива не имеет ничего общего с его преобразованием в JSON. Сначала создайте массив PHP с необходимыми данными; затем, json_encode это. – IMSoP

+0

Можете ли вы поделиться оригинальным массивом PHP? – Joseph

ответ

5

Ваш исходный массив является 2-мерным. Вы должны получить элементы каждого суб-массива, а затем преобразовать, что JSON:

echo json_encode(array_map(function($x) { return $x['username']; }, $original_array)); 

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

+0

Perfect..Учитывая что-то новое каждый день, я благодарю вас :) И чтобы ответить на то, что вы также попросили, я просто вытаскиваю все из базы данных, используя PDO $ ginfo = $ stmt-> fetchAll(); и поскольку я прошу SELECT имена пользователей от пользователей – Ariana

0

Итак, сначала вам нужно создать массив PHP, в котором есть то, что вы хотите. Затем процесс кодирования JSON автоматически выдаст правильный результат. Вы должны принять ответ Barmar в:

$flat_array = array_map(function($x) { return $x['username']; }, $array_of_arrays); 

Эти три форм являются лишь разными синтаксическими соглашениями для представления то же самого - массив из шести строк.

PHP массив литерал:

Array('Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6'); 

PHP print_r выход:

Array 
(
    [0] => Test1 
    [1] => Test2 
    [2] => Test3 
    [3] => Test4 
    [4] => Test5 
    [5] => Test6 
) 

JSON:

[ "Test1", "Test2", "Test3", "Test4", "Test5", "Test6" ] 

Это последнее, конечно, также массива буквального синтаксиса для JavaScript (с JSON - это стандартизированное подмножество буквального синтаксиса Javascript). Он также работает на многих других языках, включая Perl, Python, Ruby, Haskell, Clojure, Erlang ...

Но дело в том, что структура - это то, о чем вы заботитесь. JSON - это просто синтаксис, легко преобразованный в и из.

Смежные вопросы