Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php根据条件重新排列数组值_Php - Fatal编程技术网

php根据条件重新排列数组值

php根据条件重新排列数组值,php,Php,基本上我有这个阵列: array( '08:00-08:40' => array( 't' => '39', 'sub' => 'COMP' ), '08:40-09:20' => array( 't' => '17', 'sub' => 'KIS' ), '09:20-10:00' => array( 't' => '36', 'sub' => 'B/ST' ), '10:20-11:00'

基本上我有这个阵列:

array(
'08:00-08:40' => array(
    't' => '39',
    'sub' => 'COMP'
),
'08:40-09:20' => array(
    't' => '17',
    'sub' => 'KIS'
),
'09:20-10:00' => array(
    't' => '36',
    'sub' => 'B/ST'
),
'10:20-11:00' => array(
    't' => '7',
    'sub' => 'ENG'
),
'11:00-11:40' => array(
    't' => '36',
    'sub' => 'B/ST'
),
'11:40-12:20' => array(
    't' => '31',
    'sub' => 'HIS'
),
'12:20-13:00' => array(
    't' => '26',
    'sub' => 'PHY'
),
'14:00-14:40' => array(
    't' => '33',
    'sub' => 'GEO'
),
'14:40-15:20' => array(
    't' => '31',
    'sub' => 'HIS'
),
'15:20-16:00' => array(
    't' => '20',
    'sub' => 'BIO'
)
)

我的要求是,如果元素['sub']在整个数组中出现两次,那么这两个实例在数组中应该相邻

因此,对于上述阵列,我希望有以下输出:

array(
'08:00-08:40' => array(
    't' => '39',
    'sub' => 'COMP'
),
'08:40-09:20' => array(
    't' => '17',
    'sub' => 'KIS'
),
'09:20-10:00' => array(
    't' => '36',
    'sub' => 'B/ST'
),
'10:20-11:00' => array(
    't' => '36',
    'sub' => 'B/ST'
),
'11:00-11:40' => array(
    't' => '7',
    'sub' => 'ENG'
),
'11:40-12:20' => array(
    't' => '31',
    'sub' => 'HIS'
),
'12:20-13:00' => array(
    't' => '31',
    'sub' => 'HIS'
),
'14:00-14:40' => array(
    't' => '26',
    'sub' => 'PHY'
),
'14:40-15:20' => array(
    't' => '33',
    'sub' => 'GEO'
),
'15:20-16:00' => array(
    't' => '20',
    'sub' => 'BIO'
)
)


我不知道如何适应我的情况..非常感谢任何帮助

您可以根据
子元素对值进行排序。要保持键的原始顺序,可以将它们保存在另一个数组中,然后使用
array\u combine
将其与已排序的数组重新组合在一起

$keys = array_keys($array);
usort($array, function($x, $y) {
    if ($x['sub'] == $y['sub']) {
        return 0;
    } elseif ($x['sub'] < $y['sub']) {
        return -1;
    } else {
        return 1;
    }
});
$array = array_combine($keys, $array);
$keys=array\u keys($array);
usort($array,function($x,$y){
如果($x['sub']=$y['sub']){
返回0;
}elseif($x['sub']<$y['sub'])){
返回-1;
}否则{
返回1;
}
});
$array=array\u combine($key,$array);

为什么不根据
sub
值对数组进行排序?这将使所有具有相同值的元素彼此相邻。@Barmar我已编辑了问题的标题和正文。.排序将重新排列元素,但我只希望重新排列值