JQuery — как я могу создать необычный JSON-формат, используя переполнение стека

пожалуйста, я использую fancytree в первый раз, и я обнаружил некоторые трудности при создании результата Json для fancytree.
У меня есть таблица базы данных, содержащей идентификатор, имя, desc, parent_id.

я работаю над codeigniter это мой код:

public function my_tree(){
$this->data['tree'] = array();
$res = $this->crud->read('dbtree')->result_array();
//iterate on results row and create new index array of data
foreach($res as $value){
$this->data['tree'] = $res;
}
$itemsByReference = array();
// Build array of item references:
foreach($this->data['tree'] as $key => &$item) {
$itemsByReference[$item['id']] = &$item;
// Children array:
$itemsByReference[$item['id']]['children'] = array();
// Empty data class (so that json_encode adds "data: {}" )
$itemsByReference[$item['id']]['data'] = new StdClass();
}

// Set items as children of the relevant parent item.
foreach($this->data['tree'] as $key => &$item)
if($item['parent_id'] && isset($itemsByReference[$item['parent_id']]))
$itemsByReference [$item['parent_id']]['children'][] = &$item;

// Remove items that were added to parents elsewhere:
foreach($this->data['tree'] as $key => &$item) {
if($item['parent_id'] && isset($itemsByReference[$item['parent_id']]))
unset($this->data['tree'][$key]);
}
// Encode:
$this->data['page'] = "server_tree";
$this->load->view('layout', $this->data);
}

Как я могу сделать эти ключи с помощью цикла PHP:

[
{"title": "Expanded folder with children", "expanded": true, "folder": true, "children": [
{"key": "1_2", "title": "Expanded sub-item", "expanded": true, "children": [
{"key": "1_2_1", "title": "Active sub-item (active and focus on init)", "active": true, "focused": true},
{"key": "1_2_2", "title": "Basic <i>menu item</i> with <strong class='text-semibold'>HTML support</strong>"}
]},
{"key": "1_3", "title": "Expanded sub-item", "children": [
{"key": "1_3_1", "title": "Sub-item 2.2.1"},
{"key": "1_3_2", "title": "Sub-item 2.2.2"}
]}
]},
{"key": "2", "title": "Menu item with key and tooltip", "extraClasses": "has-tooltip", "tooltip": "Look, a tool tip!"},
{"key": "3", "title": "Collapsed folder", "folder": true, "children": [
{"key": "3_1", "title": "Sub-item 1.1"},
{"key": "3_1", "title": "Sub-item 1.2"}
]},
{"key": "4", "title": "This is a selected item", "selected": true},
{"key": "5", "title": "Document with some children (expanded on init)", "expanded": true, "children": [
{"key": "5_1", "title": "Document sub-item"},
{"key": "5_2", "title": "Another document sub-item", "children": [
{"key": "5_2_1", "title": "Sub-item 2.1.1"},
{"key": "5_2_2", "title": "Sub-item 2.1.2"}
]}
]}

]

0

Решение

Вы могли бы использовать Маршал Сериализатор легко создать структуру.

Затем передайте сгенерированный массив json_encode функция, а затем использовать его для фантазии дерева.

TreeMapper.php

namespace MyApp\Mapper;

use KingsonDe\Marshal\AbstractMapper;
use MyApp\Data\Tree;

class TreeMapper extends AbstractMapper {

public function map(Tree $tree) {
$output = [
'key'   => $tree->getKey(),
'title' => $tree->getTitle(),
];

if ($tree->isFolder()) {
$output['folder']   = true;
$output['children'] = $this->collection($this, $tree->getChildren());
}

return $output;
}
}

fancytree.php

use KingsonDe\Marshal\Marshal;
use MyApp\Mapper\TreeMapper;

$treeCollection = getFancyTreeCollection();

$data = Marshal::serializeCollection(new TreeMapper(), $treeCollection);

echo json_encode($data);
0

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

Других решений пока нет …

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