в основном у меня такой массив:

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'
)

)

Я не могу понять, как адаптировать это решение к моему случаю ... любая помощь очень ценится

GOA

Ответов: 1

Ответы (1)

Вы можете сделать это, отсортировав значения на основе подэлемента sub. Чтобы ключи оставались в исходном порядке, вы можете сохранить их в другом массиве, а затем использовать array_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);

2022 WebDevInsider