根据用户选择的条件对 JSON 数组进行排序


sorting JSON array on users selected criteria

我有如下json数组:

{   
    "class": [
     {
        "name":"A",
        "std":"5"   
     },
       {
        "name":"B",
        "std":"4"   
     },  {
        "name":"C",
        "std":"6"   
     },  {
        "name":"D",
        "std":"9"   
     },{
        "name":"Z",
        "std":"3"   
     },  {
        "name":"H",
        "std":"0"   
     }, {
        "name":"I",
        "std":"1"   
     }
]
}

我已经解码了数组并通过以下代码以表格格式显示它:

$file=getcwd()."/test1.json";
echo $file;
if (file_exists($file)) {
$t=file_get_contents(($file));
$t=json_decode($t);
echo "<pre>";
echo "<table>";
$default=$t->class;

    if(isset($t->class) && !empty($t->class)):
        foreach($t->class as $value):
            arsort($value);
            $vaule=(object) $value; 
            echo "<tr><td>$value->name</td><td>$value->std</td></tr>";           
        endforeach;
    endif;  
echo "</table>";
echo "The file exists";
} 
else {
echo "The file does not exist";
}


现在它想根据用户从下拉框中的选择对数组进行排序,如下所示:

<form action="jason.php"  method="POST">
<select name="sort">
    <option value="asc">ASCENDING</option>
    <option value="desc">DESCENDING</option>
</select>
<select name="sortby">
    <option value="name">NAME</option>
    <option value="std">STANDARD</option>
</select>
<input type="submit" value="Save"/> 
</form>


我试过使用usort()但我无法得到答案
任何帮助都是可观的。提前致谢

您无法使用 usort();,因为您的json_decode();将返回对象而不是数组。

要解决此问题,您可以使用第二个可选boolean,它将指示返回类型。默认情况下,这是假的,如果设置为 true,json 解码将返回一个数组,然后您可以使用该数组usort();

例如

$t = json_decode($t, true); // returns array

但是请注意,对象在填充时比数组快 50%(我相信)。对于小型应用程序,这并不明显,但是如果您的应用程序吸引了成千上万的访问者,我会查看是否有对象的usort();