PHP中如何按name属性对零售商对象数组按字母排序?
嘿,这个需求在日常开发里太常见了!PHP里有几个简单直接的方法能帮你按对象的name属性做字母排序,我给你整理两种最常用的方案:
方法一:用usort()排序(不保留原数组键)
usort()是PHP里用来对数组进行自定义排序的函数,它会直接修改原数组,并且不保留原有的键名。适合你的零售商数组是索引数组的情况:
// 示例零售商数组 $retailers = [ (object) ['name' => 'Zara'], (object) ['name' => 'Apple Store'], (object) ['name' => 'Best Buy'] ]; // 按name属性不区分大小写排序 usort($retailers, function($a, $b) { // strcasecmp()会忽略大小写,要是需要严格区分大小写就用strcmp() return strcasecmp($a->name, $b->name); });
方法二:用uasort()排序(保留原数组键)
如果你的零售商数组是关联数组(每个元素有自定义的键),不想丢失这些键的话,就用uasort(),用法和usort()几乎完全一样,只是会保留原键:
uasort($retailers, function($a, $b) { return strcasecmp($a->name, $b->name); });
PHP 7+ 更简洁的写法:太空船运算符<=>
从PHP 7开始,你可以用太空船运算符来简化比较逻辑,代码更清爽:
// 区分大小写的排序 usort($retailers, function($a, $b) { return $a->name <=> $b->name; }); // 不区分大小写的排序,先转小写再比较 usort($retailers, function($a, $b) { return strtolower($a->name) <=> strtolower($b->name); });
小提示:处理特殊情况
如果你的对象里name属性可能为空、不存在或者不是字符串,最好加个判断避免警告:
usort($retailers, function($a, $b) { $nameA = isset($a->name) ? strtolower((string)$a->name) : ''; $nameB = isset($b->name) ? strtolower((string)$b->name) : ''; return $nameA <=> $nameB; });
这样排序完之后,你的$retailers数组就会按name属性的字母顺序排列啦!
内容的提问来源于stack exchange,提问作者DBarkz
相关产品推荐
相关产品推荐

