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 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题