PHP如何对存储对象的数组按is_main字段排序,值为1的优先靠前
解决方法很简单,在遍历拼接姓名前,先用usort对目标教师数组做自定义排序即可,修改后的代码如下:
// 先取出待处理的教师数组 $teachers = $data->class_teacher_arr[$item->id_class]; // 自定义排序规则:is_main为1的排在最前 usort($teachers, function ($a, $b) { // 转整型后倒序比较,1的优先级高于0 return (int)$b->is_main - (int)$a->is_main; }); $storage = []; foreach ($teachers as $reference) { $storage[] = $reference->firstname . ' ' . $reference->lastname . ' ' . $reference->is_main; } echo implode('<br/>', $storage);
说明
usort是PHP内置的自定义排序函数,会直接修改传入的数组本身,不需要额外接收返回值- 你的数组里
is_main是字符串类型的"1"和"0",比较前转成整型可以避免字符串比较出现异常 - 如果你使用PHP7及以上版本,排序回调也可以用太空船运算符简化书写,效果完全一致:
usort($teachers, function ($a, $b) { return (int)$b->is_main <=> (int)$a->is_main; }); - 如果你不想修改原数组的顺序,可以先对数组做浅拷贝再排序:
$teachers = (array)$data->class_teacher_arr[$item->id_class];
内容的提问来源于stack exchange,提问作者Crunchip
相关产品推荐
相关产品推荐

