Yii编码JavaScript的数组

时间:2013-12-21 11:27:02

标签: javascript php arrays yii

我需要用例如多维数组编码多维数组。 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' }
        ]
    }
];

有没有办法做到这一点?

3 个答案:

答案 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"}
        ]
    }
]
*/

它基本上是一个递归函数,可以从传递的数组中删除任何数字索引。