你如何通过元素在php中按字母顺序排列json文件?

时间:2015-03-27 00:40:50

标签: javascript php arrays json usort

目前,我有这个json文件:

{"root":[
       {
          "companyname":"Zcompany",
          "style":"Dstyle",
          "price":"$ 99.99"
       },
       {
          "companyname":"Scompany",
          "style":"Gstyle",
          "price":"$ 129.99"
       },
       {
          "companyname":"Fcompany",
          "style":"Estyle",
          "price":"$ 19.99"
       }
    ]
}

我使用php创建了一个表,但我想能够按公司名称按字母顺序排列json文件。

我无法让usort工作。我很确定它是因为我使用的usort错误用于我所拥有的json类型。

但是,我似乎无法弄清楚我做错了什么。

<?php
//read json file
$file = 'root.json';
$filedata = file_get_contents($file);
$root = json_decode($filedata,true);

function build_sorter($key) {
  return function ($a, $b) use ($key) {
      return strnatcmp($a[$key], $b[$key]);
  };
}

usort($root, build_sorter('root'));

foreach($root['root'] as $p) {
  //prints table from the json file
  echo '<tr><br>
    <td>'.$p['companyname'].'</td>'.
    '<td>'.$p['style'].'</td>'.
    '<td>'.$p['price'].'</td>'.
    '</tr>';
  ;
}
?>

当我运行上面的代码时,我收到错误

  

警告:第14行的foreach()提供的参数无效//启动foreach的行。

     

未定义的索引:第14行的root //启动foreach的同一行

1 个答案:

答案 0 :(得分:2)

尝试通过root键对其进行排序是没有意义的,它的父键是使用内层中的键(price, style, etc..):

usort($root['root'], build_sorter('price'));