Как в PHP привести массивы такого вида:
$ar1 = array('Магазин 1', 15, 25, 30);
$ar2 = array('Магазин 2', 25, 45, 50);
$ar3 = array('Месяц', 1, 2, 3);
к такому виду:
$values = array(
array('Месяц', 'Магазин 1', 'Магазин 2'),
array('1', 15, 25),
array('2', 25, 45),
array('3', 30, 50),
);
2 цикла:
function flip($arr) {
$result = array();
foreach ($arr as $index => $list) {
foreach ($list as $key => $value) {
$result[$key][$index] = $value;
}
}
return $result;
}
$ar1 = array('Магазин 1', 15, 25, 30);
$ar2 = array('Магазин 2', 25, 45, 50);
$ar3 = array('Месяц', 1, 2, 3);
$values = flip([$ar3, $ar1, $ar2]);
var_dump($values);
Демо
добавлю в копилку пару вариантов:
1) Использование функции array_map()
$result = array_map(function($a,$b,$c){ return [$a,$b,$c]; }, $ar3,$ar1,$ar2);
2) Использование функции array_column()
$data = [$ar3, $ar1, $ar2];
$result = [
array_column($data,0),
array_column($data,1),
array_column($data,2),
array_column($data,3),
];
$ar1 = array('Магазин 1', 15, 25, 30);
$ar2 = array('Магазин 2', 25, 45, 50);
$ar3 = array('Месяц', 1, 2, 3);
$result=array();
//Считаем количество массивов доступных для объединения (тут будет количество + 1. Потом отнимем)
$num=1;
while (isset(${'ar'.$num})) {
$num++;
}
//Считаем количество элементов в массиве (предполагается, что везде они равны!) В идеале тут нужно проверку перебором всех массивов. Сами допишите).
$cnt=count($ar1);
//Проверка, чтобы всё было ок. По сути данные наши - это матрица
if ($num!=$cnt) {
exit('Err');
}
$num--; //Получаем точное количество исходных массивов
//Начинаем заполнять итоговый массив
for ($i=1; $i <= $num ; $i++) {
foreach (${'ar'.$i} as $key => $value) {
$result[$key][]=$value;
}
}
print_r($result);
На выходе будет
Array
(
[0] => Array
(
[0] => Магазин 1
[1] => Магазин 2
[2] => Месяц
)
[1] => Array
(
[0] => 15
[1] => 25
[2] => 1
)
[2] => Array
(
[0] => 25
[1] => 45
[2] => 2
)
[3] => Array
(
[0] => 30
[1] => 50
[2] => 3
)
)
Чтобы получилось так, что в начале месяц, а потом магазин 1 и 2 (без лишних заморочек), рекомендую изменить и порядок нумерации исходных массивов. Если, например, всегда последним массивом месяц, то зная общее количество массивов, проще всего пересоздать переменные, поменяв порядок. Т.е. порядок и нумерация исходных массивов должна быть такая:
$ar1 = array('Месяц', 1, 2, 3);
$ar2 = array('Магазин 1', 15, 25, 30);
$ar3 = array('Магазин 2', 25, 45, 50);
Тогда получите результат, как вы указали (если это 100% критично). Если это нужно, тогда код вот такой
$ar1 = array('Магазин 1', 15, 25, 30);
$ar2 = array('Магазин 2', 25, 45, 50);
$ar3 = array('Месяц', 1, 2, 3);
$result=array();
//Считаем количество массивов доступных для объединения (тут будет количество + 1. Потом отнимем)
$num=1;
while (isset(${'ar'.$num})) {
$num++;
}
//Считаем количество элементов в массиве (предполагается, что везде они равны!).
$cnt=count($ar1);
//Проверка, чтобы всё было ок. По сути данные наши - это матрица
if ($num!=$cnt) {
exit('Err');
}
$num--; //Получаем точное количество исходных массивов
//Изменяем нумерацию и порядок исходных массивов
$new_arr1=${'ar'.$num};
for ($i=2; $i <= $num; $i++) {
$n=$i-1;
${'new_arr'.$i}=${'ar'.$n};
}
//Тут можно удалить старые исходные массивы
//Начинаем заполнять итоговый массив
for ($i=1; $i <= $num ; $i++) {
foreach (${'new_arr'.$i} as $key => $value) {
$result[$key][]=$value;
}
}
print_r($result);
Старался всё сделать максимально просто и последовательно, не закидывая в кучу.
P.S. " подскажите как можна в PHP". Я думал, что когда есть проверка правописания на лету, то можно уже как-нибудь да грамотно писать. Не могу сам исправить.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, подскажите можно где скачать библиотеку плеера vlc для разработки под линукс?