javascript — Сериализованный массив JQuery в массив PHP.

Я нашел следующий код онлайн. И я бы хотел использовать его в своих проектах.

http://dbushell.github.io/Nestable/

Эта перетаскиваемая jquery сгенерированная древовидная структура генерирует сериализованный массив.
Для того, что мне кажется, это сериализованный массив javascript.

[{"id":1,"children":[{"id":3}]},{"id":2,"children":[{"id":4},{"id":9,"children":[{"id":5,"children":[{"id":6},{"id":7},{"id":8}]}]}]},{"id":11},{"id":12,"children":[{"id":10}]}]

Для того, что я мог найти, я должен использовать parse_str и это должно сделать это.

Но безрезультатно.
Сгенерированный массив пуст.

Я попробовал следующий тестовый код:

   <?php

$Str = '[{"id":1},{"id":2,"children":[{"id":3},{"id":4},{"id":5,"children":[{"id":6},{"id":7},{"id":8}]},{"id":9},{"id":10}]},{"id":11},{"id":12}]';

parse_str($Str, $values);

print_r($values);

?>

Я надеюсь, что кто-нибудь видит то, что я пропускаю.

Заранее спасибо!

Ответ!

То, что я упустил из виду, что это не сериализованный Javascript
массив, а скорее строка в кодировке JSON.

Как предложено ниже, я должен использовать JSON-декодирование.

$Str = json_decode('[{"id":1},{"id":2,"children":[{"id":3},{"id":4},{"id":5,"children":[{"id":6},{"id":7},{"id":8}]},{"id":9},{"id":10}]},{"id":11},{"id":12}]');

Это даст результат, как показано ниже.

Если я хочу использовать результат в виде массива вместо того, что поставил я
следует использовать следующую функцию для преобразования объектов в действительные
массив:

function toArray($obj){
if (is_object($obj)) $obj = (array)$obj;
if (is_array($obj)) {
$new = array();
foreach ($obj as $key => $val) {
$new[$key] = toArray($val);
}
} else {
$new = $obj;
}

return $new;
}

$Str = toArray($Str);

(* это я скопировал с:
Как мне преобразовать объект в массив?
*)

0

Решение

Нет, вы должны использовать json_decode () как это

<?php

$Str = '[{"id":1},{"id":2,"children":[{"id":3},{"id":4},{"id":5,"children":[{"id":6},{"id":7},{"id":8}]},{"id":9},{"id":10}]},{"id":11},{"id":12}]';

$php_array = json_decode($Str);

// and just in case there is an error while decoding
if ( json_last_error() > 0 ) {
echo json_last_error_msg();
}

print_r($php_array);

?>

Который будет генерировать вывод:

Array
(
[0] => stdClass Object
(
[id] => 1
)

[1] => stdClass Object
(
[id] => 2
[children] => Array
(
[0] => stdClass Object
(
[id] => 3
)

[1] => stdClass Object
(
[id] => 4
)

[2] => stdClass Object
(
[id] => 5
[children] => Array
(
[0] => stdClass Object
(
[id] => 6
)

[1] => stdClass Object
(
[id] => 7
)

[2] => stdClass Object
(
[id] => 8
)

)

)

[3] => stdClass Object
(
[id] => 9
)

[4] => stdClass Object
(
[id] => 10
)

)

)

[2] => stdClass Object
(
[id] => 11
)

[3] => stdClass Object
(
[id] => 12
)

)

Или, если вы хотите, чтобы весь набор данных возвращался в виде массива, а не объектов, которые существуют в исходных данных, вы можете добавить второй параметр в json_decode($Str, true) и все это будет в массивах

<?php

$Str = '[{"id":1},{"id":2,"children":[{"id":3},{"id":4},{"id":5,"children":[{"id":6},{"id":7},{"id":8}]},{"id":9},{"id":10}]},{"id":11},{"id":12}]';

$php_array = json_decode($Str, true);

// and just in case there is an error while decoding
if ( json_last_error() > 0 ) {
echo json_last_error_msg();
}

print_r($php_array);

?>

Дать этот результат:

Array
(
[0] => Array
(
[id] => 1
)

[1] => Array
(
[id] => 2
[children] => Array
(
[0] => Array
(
[id] => 3
)

[1] => Array
(
[id] => 4
)

[2] => Array
(
[id] => 5
[children] => Array
(
[0] => Array
(
[id] => 6
)

[1] => Array
(
[id] => 7
)

[2] => Array
(
[id] => 8
)

)

)

[3] => Array
(
[id] => 9
)

[4] => Array
(
[id] => 10
)

)

)

[2] => Array
(
[id] => 11
)

[3] => Array
(
[id] => 12
)

)
1

Другие решения

Просто использовать json_decode

print_r(json_decode($Str, true));
1

По вопросам рекламы [email protected]