1

これは SO に関する私の最初の投稿なので、これがこの質問の間違った領域である場合はお詫び申し上げます。

PHP で書かれたページがあり、 jqTreeという jquery プラグインを使用して特定のレイアウトのツリーを作成しようとしています。次の戻り形式を使用して、SQL Server 2008 R2 データベースからページの読み込み時にデータを取得しています。

╔═════════════╦═══════╦═════════╗
║  Location   ║  SAN  ║  Switch ║
╠═════════════╬═══════╬═════════╣
║ LocationA   ║ SAN1  ║ Switch1 ║
║ LocationA   ║ SAN1  ║ Switch2 ║
║ LocationA   ║ SAN2  ║ Switch3 ║
║ LocationB   ║ SAN3  ║ Switch4 ║
║ LocationB   ║ SAN3  ║ Switch5 ║
║ LocationB   ║ SAN3  ║ Switch6 ║
╚═════════════╩═══════╩═════════╝

ツリーを次のようにする必要があります。

LocationA
    |_ SAN1
    |    |_ Switch1
    |    |_ Switch2
    |_ SAN2
        |_ Switch3

LocationB
    |_ SAN3
         |_ Switch4
         |_ Switch5
         |_ Switch6

jqTree サイトによると、JSON は次の形式である必要があります (私は想定しています)。

var data = [
{
    label: 'LocationA',
    children: [
        { label: 'SAN1',
          children: [
               { label: 'Switch1'},
               { label: 'Switch2'}
              ]
        },
        { label: 'SAN2',
          children: [
               { label: 'Switch3'}
              ]
        }
},
{
    label: 'LocationB',
    children: [
        { label: 'SAN1',
          children: [
               { label: 'Switch4'},
               { label: 'Switch5'},
               { label: 'Switch6'}
              ]
}
}
];

私は次のように近づくことを試みました:

$locations = array();

foreach ($results as $res) {
if(!in_array($res['town'], $locations, true)){

    $locations[$res['town']]['children'][$res['san']][] = $res['name'];
}
}

しかし、それは明らかに正しくありません...

私は入れ子の配列ソリューションを見てきましたが、何かがクリックされていないので、誰かがこれで私を助けてくれることを望んでいました. 同じ/類似の機能を持つことができる限り、別のプラグインを使用しても問題ありません。

状況を十分に説明できれば幸いですが、さらにデータが必要な場合はお知らせください。

前もって感謝します!

4

1 に答える 1

1

JSON の例を作成する配列は次のとおりです。

$data = array(
    array(
        'label' => 'LocationA',
        'children' => array(
            array(
                'label' => 'SAN1',
                'children' => array(
                    array('label' => 'Switch1'),
                    array('label' => 'Switch2')
                )
            ),
            array(
                'label' => 'SANS',
                'children' => array(
                    array('label' => 'Switch3')
                )
            )
        )
    ),
    array(
        'label' => 'LocationB',
        'children' => array(
            array(
                'label' => 'SAN1',
                'children' => array(
                    array('label' => 'Switch4'),
                    array('label' => 'Switch5'),
                    array('label' => 'Switch6')
                )
            )
        )
    )
);

echo json_encode($data);

これにより、データがその形式になるはずです。

$locations = array();

foreach ($results as $res) {
    $locations[ $res['town'] ][ $res['san'] ][] = $res['name'];
}

$data = array();
foreach ($locations as $location => $sans) {
    $location_array = array('label' => $location);
    foreach ($sans as $san => $names) {
        $san_array = array('label' => $san);
        foreach ($names as $name) {
            $san_array['children'][] = array('label' => $name);
        }
        $location_array['children'][] = $san_array;
    };
    $data[] = $location_array;
}

echo json_encode($data);
于 2014-03-29T05:53:02.740 に答える