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'),
……
);

要求自定义排序规则 在name相同的情况下对科目排序,科目排序的规则是
array('语文','数序','外语','历史','政治','地理','物理','化学','生物');

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

<?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']];
这一行标点符号错误

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-02-07
你这情况php排序比较麻烦 可以修改下SQL语句 直接排序好的
相似回答