用两个值对PHP数组排序

用两个值对PHP数组排序,php,arrays,sorting,alphabetical-sort,Php,Arrays,Sorting,Alphabetical Sort,例如,假设我有一个以下格式的PHP数组: [ {"optionname":"Math","optionid":"35741"}, {"optionname":"Robotics","optionid":"80229"}, {"optionname":"fndbwoiaghoe","optionid":"1105065296"}, {"optionname":"iphewajgiewohfoidsahg","optionid":"1385274203"}, {"optionname":"wpeog

例如,假设我有一个以下格式的PHP数组:

[
{"optionname":"Math","optionid":"35741"},
{"optionname":"Robotics","optionid":"80229"},
{"optionname":"fndbwoiaghoe","optionid":"1105065296"},
{"optionname":"iphewajgiewohfoidsahg","optionid":"1385274203"},
{"optionname":"wpeogagpoar","optionid":"1030886790"},   
{"optionname":"genpwaighipwe","optionid":"1193090269"}
]
如何按“optionname”的字母顺序对数组进行排序


谢谢

根据您的代码示例,我假设您有一个JSON编码的数组

您不希望按值排序,而是按值的特定属性排序。PHP无法知道要考虑哪个特定属性。您必须为PHP提供一种方法,让它知道使用自己的函数哪个对象位于另一个对象之前。然后,您可以告诉PHP使用该函数进行排序比较

请注意,上面的代码比较optionname属性不区分大小写。如果希望PHP考虑大小写,请将
strcacmp
替换为
strcmp

编辑:如果您使用的是早于5.3的PHP版本,则还不支持匿名函数(如上面用作
usort()
函数的第二个参数的函数)。下面的版本应该可以使用

$arr = json_decode('
[
    {"optionname":"Math","optionid":"35741"},
    {"optionname":"Robotics","optionid":"80229"},
    {"optionname":"fndbwoiaghoe","optionid":"1105065296"},
    {"optionname":"iphewajgiewohfoidsahg","optionid":"1385274203"},
    {"optionname":"wpeogagpoar","optionid":"1030886790"},   
    {"optionname":"genpwaighipwe","optionid":"1193090269"}
]
');

function compareObjects($obj1, $obj2)
{
    return strcasecmp($obj1->optionname, $obj2->optionname);
}
usort($arr, 'compareObjects');

$arr = json_encode($arr);

好的,谢谢@dev,应该是$obj2->optionid?或者optionname您的问题是“如何按照“optionname”的值按字母顺序对数组进行排序?”。然后,排序函数需要比较要比较的两个给定对象的
选项name
。您是否希望像@dev null alliner建议的那样,对
optionname
optionid
进行比较?我在第一行收到一个“解析错误:语法错误,意外的T_函数”,usort(…)您能否澄清您在原始问题中仍然存在的问题?谢谢,我没办法回答。
$arr = json_decode('
[
    {"optionname":"Math","optionid":"35741"},
    {"optionname":"Robotics","optionid":"80229"},
    {"optionname":"fndbwoiaghoe","optionid":"1105065296"},
    {"optionname":"iphewajgiewohfoidsahg","optionid":"1385274203"},
    {"optionname":"wpeogagpoar","optionid":"1030886790"},   
    {"optionname":"genpwaighipwe","optionid":"1193090269"}
]
');

function compareObjects($obj1, $obj2)
{
    return strcasecmp($obj1->optionname, $obj2->optionname);
}
usort($arr, 'compareObjects');

$arr = json_encode($arr);