Как отсортировать PHP массив?
Всем привет!
Есть массив вид:
$array = [
array(
0=>[0=> "date", 1=> "created_at", 2=> "warranty"],
1=>[0=> "11111111111111", 1=> "22222222222", 2=> "rerererer"]
),
array(
0=>[0=> "created_at", 1=> "date", 2=> "warranty"],
1=>[0=> "3333333", 1=> "44444444444444", 2=> "xzzxzxzxzx"]
),
array(
0=>[0=> "warranty", 1=> "created_at", 2=> "date"],
1=>[0=> "55555555", 1=> "6666666", 2=> "nbnbnbnbnbn"]
),
];
Нужно привести его к виду:
$arRes = [
array(
0=>[0=> "date", 1=> "created_at", 2=> "warranty"],
1=>[0=> "11111111111111", 1=> "22222222222", 2=> "rerererer"],
2=>[0=> "44444444444444", 1=> "3333333", 2=> "xzzxzxzxzx"],
3=>[0=> "nbnbnbnbnbn", 1=> "6666666", 2=> "55555555"],
)
];
мне пока приходит в голову что то вроде: [date]=>[0=>значение1, 1=>значение2...] [created_at]=>[0=>значение1, 1=>значение2...]...
а потом уже придать ему необходимый вид
P.S. Расписывать весь код нет необходимости, нужно что бы мне просто объяснили логику реализации.
Ответы (1 шт):
Только это у вас не сортировка. Это реструктуризация.
$keys = [];
$keyedSource = [];
foreach($source as $table){
$keyedSource[] = array_combine($table[0], $table[1]);
$keys = array_unique(array_merge($keys, $table[0]));
}
$result = [$keys];
foreach($keys as $keyIndex=>$key) foreach($keyedSource as $i=>$row){
$result[$i + 1][$keyIndex] = $row[$key] ?? null;
}
//(не проверял код. может быть ошибка есть, но суть думаю понятна)
Если не учесть то, что ключей может быть переменное количество, или они могут не совпадать - было бы в 2 раза короче.
Только замечу - таблица в виде матрицы, с таким неудобно работать: без строковых ключей. Для вашей дальнейшей задачи, скорее всего массив удобнее всего было бы оставить в виде $keyedSource , при чём в качестве ключей самого массива $keyedSource присвоить id $keyedSource = array_combine(array_column($keyedSource, 'id'), $keyedSource) ( он же у вас наверняка есть в колонках ) - вот это будет уже наиболее удобная структура для работы с табличными данными.