1

現在、会計データを表示するためのテーブルを作成しています。請求書は、ライセンス、年、半分、および四半期に分割されています。請求書は、次のように2D配列としてクエリから取得されます。

array(
    'invoice0' = array(data),
    'invoice2' = array(data),
    'invoice3' = array(data),
    'invoice4' = array(data),
    'invoice5' = array(data),
    'invoice1' = array(data)
)

現在、私は4つの深さのネストされたforeachループを使用していますが、これはかなり悪そうですが、すべてのレベルのデータ行を使用して行を編成する5d配列構造を作成しています。例えば:

'License' = array(
  'Year0' = array(
    'Half0' = array(
      'Quarter0' = array(
        'invoice0' = array(data),
        'invoice1' = array(data)
      ),
      'QData' = array(data)
    ),
    'HData' = array(data)
    'Half1' = array(
      'Quarter0' = array(
        'invoice3' = array(data),
        'invoice4' = array(data)
      ),
      'Quarter1' = array(
        'invoice5' = array(data),
        'invoice6' = array(data)
      ),
      'QData' = array(data)
    ),
    'HData' = array(data)
  ),
  'YData' = array(data)
)

等々。各レベルのデータには、各請求書のデータに金額の合計を含める必要があります。私が達成しようとしている最終製品は、拡張可能なテーブルの行の束(またはリストアイテム。このプロジェクトのテーブル構造に制限されています)です。それで:

<tr>License info</tr>
<tr>License info</tr>
<tr>License info</tr>
<tr>License info</tr>

そして、あなたが1つをクリックすると:

<tr>License info</tr>
<tr>License info</tr>
<tr>Year1 Info</tr>
<tr>Year2 Info</tr>
<tr>Year3 Info</tr>
<tr>License info</tr>
<tr>License info</tr>

最終的:

<tr>License info</tr>
<tr>License info</tr>
<tr>Year1 Info</tr>
<tr>Year2 Info</tr>
<tr>Half1 Info</tr>
<tr>Quarter1 Info</tr>
<tr>Quarter2 Info</tr>
<tr>Invoice1 Info</tr>
<tr>Invoice2 Info</tr>
<tr>Invoice3 Info</tr>
<tr>Quarter3 Info</tr>
<tr>Quarter4 Info</tr>
<tr>Half2 Info</tr>
<tr>Year3 Info</tr>
<tr>License info</tr>
<tr>License info</tr>

それで、何かアイデアはありますか?5つの深さの階層ドロップダウンリストを取得しながら、このような複雑なデータ操作を回避する方法はありますか?

4

1 に答える 1

1

さて、私はあなたが何を望んでいるのかを完全には理解していませんでしたが、私はこれをしました、ちょっと混乱しました、へー:

function get_data($data, $level = 0)
{
    $html = '';

    foreach ($data as $name => $val) {
        if (!is_int($name)) {
            if (!$level)
                $html .= '<tr>';
            $html .= '<ul>';
            $html .= '<li><span class="parent">'.$name.'</span>';
            $html .= get_data($val, $level + 1);
            $html .= '</li></ul>';
            if (!$level)
                $html .= '</tr>';
        } else {
            $html .= '<ul><li>'.$val.'</li></ul>';
        }
    }
    return $html;
}

HTMLは次のようになります(jQueryを使用)。

<style>
span.parent {
    cursor:pointer;
}
ul ul {
    display:none;
}
</style>
<table>
<?php echo get_data($data) ?>
</table>
<script>
$('span.parent').click(function(){
    if ($(this).hasClass('open')) {
        $(this).parent().children('ul').hide();
        $(this).removeClass('open');
    } else {
        $(this).parent().children().show();
        $(this).addClass('open');
    }
})
</script>

次の配列でこれを試してみましたが...うまくいきましたが、これがあなたが探しているものかどうかはわかりません。

$data = array(
    'License' => array(
        'Year0' => array(
            'Half0' => array(
                'Quarter0' => array(
                    'invoice0' => array('data'),
                    'invoice1' => array('data')
                ),
                'QData' => array('data')
            ),
            'HData' => array('data'),
            'Half1' => array(
                'Quarter0' => array(
                    'invoice3' => array('data'),
                    'invoice4' => array('data')
                ),
                'Quarter1' => array(
                    'invoice5' => array('data'),
                    'invoice6' => array('data')
                ),
                'QData' => array('data')
            ),
            'HData' => array('data')
        ),
        'YData' => array('data')
    ),

    'License2' => array(
        'Year0' => array(
            'Half0' => array(
                'Quarter0' => array(
                    'invoice0' => array('data'),
                    'invoice1' => array('data'),
                ),
                'QData' => array('data')
            ),
            'HData' => array('data'),
            'Half1' => array(
                'Quarter0' => array(
                    'invoice3' => array('data'),
                    'invoice4' => array('data')
                ),
                'Quarter1' => array(
                    'invoice5' => array('data'),
                    'invoice6' => array('data')
                ),
                'QData' => array('data')
            ),
            'HData' => array('data')
        ),
        'YData' => array('data')
    )
);
于 2012-09-07T17:33:29.893 に答える