我需要用例如多维数组编码多维数组。 CJavaScript或CJSON,但我需要避免PHP数组键。
假设以下数据结构
$dataTree = array(
'39'=>array(
'label' => 'node1',
'children' => array(
'42'=>array('label' => 'child1'),
'44'=>array('label' => 'child2'),
),
),
'40'=>array(
'label' => 'node2',
)
);
我需要获得以下输出(在Javascript中):
var data = [
{
label: 'node1',
children: [
{ label: 'child1' },
{ label: 'child2' }
]
},
{
label: 'node2',
children: [
{ label: 'child3' }
]
}
];
有没有办法做到这一点?
答案 0 :(得分:1)
使用此代码。
<?php
$dataTree = array(
'39'=>array(
'label' => 'node1',
'children' => array(
'42'=>array('label' => 'child1'),
'44'=>array('label' => 'child2'),
),
),
'40'=>array(
'label' => 'node2',
'children' => array(
'42'=>array('label' => 'child3'),
),
)
);
$res = array();
foreach( $dataTree as $val)
{
$temp_ch = array();
foreach($val["children"] as $ch)
$temp_ch[]=$ch;
$val["children"] = $temp_ch;
$res[] = $val;
}
echo json_encode($res);
?>
答案 1 :(得分:1)
对于你的例子:
$dataTree = array(
'39'=>array(
'label' => 'node1',
'children' => array(
'42'=>array('label' => 'child1'),
'44'=>array('label' => 'child2'),
),
),
'40'=>array(
'label' => 'node2',
)
);
试试这个:
function correctToJsonArray($array){
foreach ($array as $key => $value) {
if(isset($value['children'])){
$value['children'] = correctToJsonArray($value['children']);
}
if(isset($value['label'])){
$temp[]=$value;
}
}
return $temp;
}
如果输出如下输出:
echo json_encode(correctToJsonArray($dataTree));
to,
[{"label":"node1","children":[{"label":"child1"},{"label":"child2"}]},{"label":"node2"}]
答案 2 :(得分:0)
如果您想要删除数字索引,那么这应该适合您:
$dataTree = array(
'39'=>array(
'label' => 'node1',
'children' => array(
'42'=>array('label' => 'child1'),
'44'=>array('label' => 'child2'),
),
),
'40'=>array(
'label' => 'node2',
'children' => array(
'42'=>array('label' => 'child3'),
),
)
);
function removeNumericKeys($arr) {
$return = array();
foreach ($arr as $k => $v) {
$data = (is_array($v)) ? removeNumericKeys($v) : $v;
if (is_numeric($k)) {
$return[] = $data;
} else {
$return[$k] = $data;
}
}
return $return;
}
echo json_encode(removeNumericKeys($dataTree));
/* returns
[
{
"label":"node1",
"children":[
{"label":"child1"},
{"label":"child2"}
]
},
{
"label":"node2",
"children":[
{"label":"child3"}
]
}
]
*/
它基本上是一个递归函数,可以从传递的数组中删除任何数字索引。