php 二维数组排序问题 某字段按照自定义规则排序 20

从数据读出的数据$arr=array(0=>array('id'=>'2014347856','name'=>'张甜','科目'=>'语文','tag'=>'期中考试',... 从数据读出的数据
$arr=array(
0=>array('id'=>'2014347856','name'=>'张甜','科目'=>'语文','tag'=>'期中考试','成绩'=>'142'),
1=>array('id'=>'2014347856','name'=>'张甜','科目'=>'数学','tag'=>'期中考试','成绩'=>'98'),
2=>array('id'=>'2014347856','name'=>'张甜','科目'=>'英语','tag'=>'期中考试','成绩'=>'118'),
3=>array('id'=>'2014347856','name'=>'张甜','科目'=>'化学','tag'=>'期中考试','成绩'=>'78'),
4=>array('id'=>'2014347856','name'=>'张甜','科目'=>'物理','tag'=>'期中考试','成绩'=>'132'),
5=>array('id'=>'2014347856','name'=>'张甜','科目'=>'生物','tag'=>'期中考试','成绩'=>'115'),
6=>array('id'=>'2014347856','name'=>'张甜','科目'=>'地理','tag'=>'期中考试','成绩'=>'99'),
7=>array('id'=>'2014347856','name'=>'张甜','科目'=>'历史','tag'=>'期中考试','成绩'=>'88'),
8=>array('id'=>'2014347856','name'=>'张甜','科目'=>'政治','tag'=>'期中考试','成绩'=>'125'),
9=>array('id'=>'2014347880','name'=>'李鸣','科目'=>'语文','tag'=>'期中考试','成绩'=>'79'),
10=>array('id'=>'2014347880','name'=>'李鸣','科目'=>'数学','tag'=>'期中考试','成绩'=>'148'),
11=>array('id'=>'2014347880','name'=>'李鸣','科目'=>'英语','tag'=>'期中考试','成绩'=>'142'),
……
);

要求自定义排序规则 在name相同的情况下对科目排序,科目排序的规则是
array('语文','数序','外语','历史','政治','地理','物理','化学','生物');
展开
 我来答
奴性的世界day
2017-02-09 · TA获得超过558个赞
知道小有建树答主
回答量:575
采纳率:0%
帮助的人:382万
展开全部

复杂的数组排序可以用自定义的排序规则

<?php

$arr = array(
    0 => array('id' => '2014347856', 'name' => '张甜', '科目' => '语文', 'tag' => '期中考试', '成绩' => '142'),
    1 => array('id' => '2014347856', 'name' => '张甜', '科目' => '数学', 'tag' => '期中考试', '成绩' => '98'),
    2 => array('id' => '2014347856', 'name' => '张甜', '科目' => '英语', 'tag' => '期中考试', '成绩' => '118'),
    3 => array('id' => '2014347856', 'name' => '张甜', '科目' => '化学', 'tag' => '期中考试', '成绩' => '78'),
    4 => array('id' => '2014347856', 'name' => '张甜', '科目' => '物理', 'tag' => '期中考试', '成绩' => '132'),
    5 => array('id' => '2014347856', 'name' => '张甜', '科目' => '生物', 'tag' => '期中考试', '成绩' => '115'),
    6 => array('id' => '2014347856', 'name' => '张甜', '科目' => '地理', 'tag' => '期中考试', '成绩' => '99'),
    7 => array('id' => '2014347856', 'name' => '张甜', '科目' => '历史', 'tag' => '期中考试', '成绩' => '88'),
    8 => array('id' => '2014347856', 'name' => '张甜', '科目' => '政治', 'tag' => '期中考试', '成绩' => '125'),
    9 => array('id' => '2014347880', 'name' => '李鸣', '科目' => '语文', 'tag' => '期中考试', '成绩' => '79'),
    10 => array('id' => '2014347880', 'name' => '李鸣', '科目' => '数学', 'tag' => '期中考试', '成绩' => '148'),
    11 => array('id' => '2014347880', 'name' => '李鸣', '科目' => '英语', 'tag' => '期中考试', '成绩' => '142'),
);
/*自定义排序*/
function userSort($a, $b)
{
    if ($a['name'] == $b['name']) {
        /*排序科目*/
        $subjectSort = array('语文', '数学', '英语', '历史', '政治', '地理', '物理', '化学', '生物');
        foreach ($subjectSort as $index => $item) {
            if ($a['科目'] == $item) {
                $tmp1 = $index;
            }
            if ($b['科目'] == $item) {
                $tmp2 = $index;
            }
        }

        return $tmp1 < $tmp2 ? -1 : 1;
    } else {
        /*排序name*/
        $tmpArr = [$a['name'], $b['name']];
        sort($tmpArr);

        return $a['name'] == $tmpArr[0] ? -1 : 1;
    }
}

usort($arr, 'userSort');

var_dump($arr);
追问
$tmpArr = [$a['name'], $b['name']];
这一行标点符号错误
段弟电音工作室
2017-02-07
知道答主
回答量:23
采纳率:0%
帮助的人:2万
展开全部
你这情况php排序比较麻烦 可以修改下SQL语句 直接排序好的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式