【问题标题】:Sort JSON values by their value [duplicate]按值对 JSON 值进行排序 [重复]
【发布时间】:2016-05-24 06:27:11
【问题描述】:

这是我的 JSON 文件:

    {
"example": "1",
"example2": 2,
"text": "3",
"info": {
    "agent": 4,
    "sum": 5,
    "collection": [{
        "Name": "6",
        "Pic": "7"
    }, {
        "Name": "8",
        "Pic": "9"
    }, {
        "Name": "10",
        "Pic": "11"
    }]
     }

      }

我在 foreach 循环中显示JSON 文件的结果:

$data = json_decode(file_get_contents('http://linktojson.com'));
foreach($data->info->collection as $key){

    echo $key->Pic;
    echo $key->Name;

  }

如您所见,“Pic”有不同的数字。如何使用sort() 让最大的数字显示在 foreach 循环的顶部,而最小的数字显示在底部?

【问题讨论】:

  • array_multisort 为您完成了这项工作

标签: php json sorting foreach


【解决方案1】:

您需要在这里使用array_multisortCheck Online

$json = '{
"example": "1",
"example2": 2,
"text": "3",
"info": {
    "agent": 4,
    "sum": 5,
    "collection": [{
        "Name": "6",
        "Pic": "7"
        }, {
            "Name": "8",
            "Pic": "9"
        }, {
            "Name": "10",
            "Pic": "11"
        }]
     }
}';

$result = json_decode ($json, true);
foreach($result  as $key => $value){
    if($key == 'info'){
        $keys = array_keys($value['collection']);
        array_multisort(
            array_column($value['collection'], 'Pic'), SORT_DESC, SORT_NUMERIC, $value['collection'], $keys
        );
        $value = array_combine($keys, $value['collection']);
        foreach($value as $val){
            echo $val['Pic']." - ".$val['Name']."<br/>";
        }
    }   
}

结果:

11 - 10
9 - 8
7 - 6

【讨论】:

  • 不,你没有:usort($data-&gt;info-&gt;collection, function ($a, $b) { return $a-&gt;Pic - $b-&gt;Pic; })。 (或者可能将$a$b 颠倒过来,我往往会忘记。)
  • 这个答案正确吗?
  • 为什么不呢???问题出在哪里?
  • OP 使用Pic - name,我使用Name - pic,我需要更新。
  • 这个答案可能并不正确,但是当usort很多更简单时,它就过于复杂了。
猜你喜欢
  • 2016-06-05
  • 2018-02-18
  • 2010-10-27
  • 2011-12-28
  • 2014-07-09
  • 1970-01-01
  • 2013-07-26
  • 2023-04-06
  • 2022-01-19
相关资源
最近更新 更多