简化解析json响应

时间:2012-07-01 02:34:00

标签: php html arrays json parsing

首先,这是我一直在研究的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>' ;

}

}

输出是将月份和年份行项目精确显示在页面部分的下降所需的结果,但如何清理此代码以便在源代码中精美显示?

1 个答案:

答案 0 :(得分:0)

一些提示:

  • 分为三个部分:

    1. 从网站
    2. 获取阵列
    3. 从中提取有趣的部分
    4. 使用该部分进行显示。

      $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";
    

    这个小例子显示了整个列表,我刚刚创建了链接,这些链接应该可以用于演示目的。

如果你把东西保持小而且分开,你会发现创造一些东西更容易。