【问题标题】:Sort PHP Array With Two Values [duplicate]使用两个值对 PHP 数组进行排序 [重复]
【发布时间】:2013-08-09 22:30:38
【问题描述】:

例如,假设我有一个这种格式的 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”的值按字母顺序对数组进行排序?

谢谢!

【问题讨论】:

  • 好的,谢谢@dev-null-dweller

标签: php arrays sorting alphabetical-sort


【解决方案1】:

由于您的代码示例,我假设您有一个 JSON 编码的数组。

您不想根据值排序,而是根据值的特定属性进行排序。 PHP 无法知道您要考虑哪个特定属性。您必须为 PHP 提供一种方法,以使用您自己的函数知道哪个对象在另一个对象前面。然后你可以通过usort() 告诉 PHP 使用该函数进行排序比较。

$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"}
]
');

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

$arr = json_encode($arr);

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

编辑:如果您使用的 PHP 版本早于 5.3,则匿名函数(例如用作上述 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);

【讨论】:

  • 它应该是 $obj2->optionid 吗?或选项名称
  • 您的问题是“如何按字母顺序按“optionname”的值对数组进行排序?”。那么排序函数需要比较两个给定对象的optionname来比较。您想像@dev-null-dweller 建议的那样比较optionnameoptionid 吗?
  • 我在第一行收到“解析错误:语法错误,意外的 T_FUNCTION”,usort(...)
  • 您能否澄清您在原始问题中仍然存在的问题?谢谢。
  • 我无法回答。
猜你喜欢
  • 2011-06-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
相关资源
最近更新 更多