Я нашел следующий код онлайн. И я бы хотел использовать его в своих проектах.
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);
(* это я скопировал с:
Как мне преобразовать объект в массив?
*)
Нет, вы должны использовать 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
)
)
Просто использовать json_decode
print_r(json_decode($Str, true));