0

まず、私が取り組んできた JSON 応答を次に示します。

{  "status": "ok",
 "permalinks": [
"http:\/\/localhost\/blog\/2012\/06\/",
"http:\/\/localhost\/blog\/2012\/04\/",
"http:\/\/localhost\/blog\/2012\/03\/",
"http:\/\/localhost\/blog\/2011\/10\/"
 ],
 "tree": {
"2012": {
  "06": "221",
  "04": "2",
  "03": "3"
},
"2011": {
  "10": "3"
}
}
}

PHP は、DIV 内の HTML UL としてフォーマットするために使用されています。

function DisplayResponse(){
$baseref = 'http://localhost/' ;
$url = $baseref . 'api/get_date_index';
$r = file_get_contents( $url ) ;
if( $r !== false ){
    $r = json_decode($r,true);
    $t = $r['tree'] ;
    echo '<div class="sidebar">' ;
    echo '<h3>Response</h3>' ;
    echo '<ul class="sidebar-list">' ;
    for ( $y = 0 ; $y <= 2 ; $y++ ){
        if ( $y == 0 ){
            for ( $m = 12 ; $m >= 0 ; $m-- ) {
                $d = mktime ( 0, 0, 0, $m, 1, Date("Y") ) ;
                $du = Date("Y", $d ) ;
                $dm = Date("M", $d ) ;
                if ( $m < 11 ){
                    $mm = sprintf("%02d",$m) ;
                    if ( $t[$du][$mm] != NULL ){

                        echo '<li><a href="' . $baseref . 'blog/' . $du . '/' . $mm
                            . '/">' . $dm . ',&nbsp;' . $du . '</a></li>' ;
                    }
                } else {
                    if ( $t[$du][$m] != NULL ){

                        echo '<li><a href="' . $baseref . 'blog/' . $du . '/' . $mm
                            . '/">' . $dm . ',&nbsp;' . $du . '</a></li>' ;
                    }
                }
            }
        } else {
            for ( $m = 12 ; $m >= 0 ; $m-- ) {
                $d = mktime ( 0, 0, 0, $m, 1, ( Date("Y") - $y) ) ;
                $du = Date("Y", $d );
                $dm = Date("M", $d ) ;
                if ( $m < 11 ){
                    $mm = sprintf("%02d",$m) ;
                    if ( $t[$du][$mm] != NULL ){

                        echo '<li><a href="' . $baseref . 'blog/' . $du . '/' . $mm
                            . '/">' . $dm . ',&nbsp;' . $du . '</a></li>' ;
                    }
                } else {
                    if ( $t[$du][$m] != NULL ){

                        echo '<li><a href="' . $baseref . 'blog/' . $du . '/' . $mm
                            . '/">' . $dm . ',&nbsp;' . $du . '</a></li>' ;
                    }
                }
            }
        }
    }

    echo '</ul></div><div class="sidebar-bottom"></div>' ;

}

}

出力は、月と年の項目がページのセクションの降順で見事に表示されるという望ましい結果ですが、ソースで美しく表示されるようにこのコードをクリーンアップするにはどうすればよいですか?

4

1 に答える 1

0

いくつかのヒント:

  • 次の 3 つの部分に分けます。

    1. Web サイトから配列をフェッチする
    2. そこから気になる部分を抜粋
    3. その部分で表示を行います。

      $response = get_response();
      $tree = get_tree($response);
      output_tree($tree);
      
  • 現在の表示コード内には、多くのコード重複があります。関数に入れることで提案されているように、重複するコードを圧縮するだけです。そうすれば、ほとんどのコードが不要であることに気付くかもしれません。

  • 配列内であっても、配列を反復処理できます。

    echo "<ul>\n";
    foreach ($tree as $year => $months) {
        foreach ($months as $month => $count) {
            echo "  <li>", $month, ",&nbsp;", $year, "</li>\n";
        }
    }
    echo "<ul>\n";
    

    この小さな例はリスト全体を表示します。デモンストレーション目的で問題ないはずのリンクを作成しただけです。

物を小さく、バラバラにしておくと、何かを作成しやすくなることがわかります。

于 2012-07-01T03:17:56.947 に答える