dongxing2302 2015-12-04 17:09
浏览 45
已采纳

PHP JSON从关联数组STUCK中排序

Good day to those smarter than me. I've been all over google and here to no avail. Here's my situation... I have a json file with this:

    {
"firstset": {
    "xgroup": [
    {
        "order": 3,
        "title": "third in xgroup"
    }, {
        "order": 5,
        "title": "fifth in xgroup"
    }, {
        "order": 4,
        "title": "fourth in xgroup"
    }, {
        "order": 1,
        "title": "first in xgroup"
    }, {
        "order": 2,
        "title": "second in xgroup"
    }
    ]
},
"secondset": {
    "ygroup": [
    {
        "order": 7,
        "title": "seventh in ygroup"
    }, {
        "order": 4,
        "title": "fourth in ygroup"
    }, {
        "order": 6,
        "title": "sixth in ygroup"
    }, {
        "order": 1,
        "title": "first in ygroup"
    }, {
        "order": 3,
        "title": "third in ygroup"
    }, {
        "order": 2,
        "title": "second in ygroup"
    }, {
        "order": 8,
        "title": "eighth in ygroup"
    }, {
        "order": 5,
        "title": "fifth in ygroup"  
    }
    ]
}

}

and this is the PHP:

    $json_url = "js/testlist.json";
    $json = file_get_contents($json_url);
    $data = json_decode($json, TRUE);

    echo '<ul>';
    foreach ($data['firstset']['xgroup'] as $val) {
        echo '<li>' . $val['order'] . '.) ' . $val['title'] . '</li>';
    }
    echo '</ul>';

I've tried everything from the old fashioned 'my_sort' functions found on here to just usorting the entire array with no avail. Is there a way to sort by the 'order' field on the 'firstset' array and display the data?

Thank you in advance...

  • 写回答

1条回答 默认 最新

  • dongsi073898 2015-12-04 17:23
    关注

    To expand on my comment, here's what I'd do:

    $data = json_decode($json, true);
    //array_column: use values of order key as keys, title key as value
    $data['firstset']['xgroup'] = array_column(
        $data['firstset']['xgroup'],
        'title',//pass null here to assign the entire array to the order key (ie [order => x, title => some title])
        'order'
    );
    //sort the result by key
    ksort($data['firstset']['xgroup']);
    foreach ($data['firstset']['xgroup'] as $order => $title) {
        //use vars here
    }
    

    Demo here

    This requires PHP 5.5 or higher, so if you're running PHP 5.4, just write a simple loop:

    $ordered = array();
    foreach ($data['firstset']['xgroup'] as $arr) {
        $ordered[$arr['order']] = $arr['title'];
    }
    ksort($ordered);
    foreach ($ordered as $order => $title) {
        //same as before
    }
    

    There is a PHP implementation that is (AFAIK) fully compatible with the native array_column function on github

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?