【问题标题】:Simplify parsing a json response简化解析 json 响应
【发布时间】:2012-07-01 02:34:00
【问题描述】:

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

}

}

输出是在页面部分以降序显示月份和年份行项目的理想结果,但是我如何清理此代码以便在源代码中漂亮地显示?

【问题讨论】:

  • 使用函数返回相似的数据,你的 if else 语句中有很多重复的代码。
  • 有什么问题或者您希望我们为您工作吗?
  • 拜托,拜托,不要使用一个/两个字母的变量名,除了循环计数器。

标签: php html arrays json parsing


【解决方案1】:

一些提示:

  • 分为三部分:

    1. 从网站获取数组
    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";
    

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

如果您将事物保持小而分开,您会发现创建事物会更容易。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 2016-03-06
    • 2013-03-27
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多