Пересобрать массив в PHP
Помогите пересобрать массив в новый вид, количество значений не ведомо как и количество ключей
Оригинальной массив
Array(
[color] => Array
(
[0] => Gray
[1] => Blue
...
)
[size] => Array
(
[0] => 1
[1] => 2
[2] => 3
...
)
...
)
должно получиться
Array
(
[0] => Array
(
[0] => Blue
[1] => 1
)
[1] => Array
(
[0] => Blue
[1] => 2
)
[2] => Array
(
[0] => Blue
[1] => 3
)
[3] => Array
(
[0] => Gray
[1] => 1
)
[4] => Array
(
[0] => Gray
[1] => 2
)
[5] => Array
(
[0] => Gray
[1] => 3
)
...
)
Ответы (2 шт):
Автор решения: CrazyBoy49z
→ Ссылка
Верный ответ
/**
* @param array $array
*
* @return array
*
* @author wfoojjaec.eu.org
*/
function arrayGenerator(array $array): array
{
// Считаем количество записей по каждому именному ключу
$count = array_map('count', $array);
// Считаем общее количество записей в результате
$product = array_product($count);
// Обнуляем счётчики для чередования значений
$keys = array_fill_keys(array_keys($array), 0);
// Делаем буфер для результата
$result = [];
for ($offset = 0; $offset < $product; $offset++) {
// Делаем буфер для значения
$value = [];
foreach ($keys as $key => &$index) {
// Собираем значение по текущим счётчикам
$value[$key] = $array[$key][$index];
// Смещаем счётчики
$index = $index === $count[$key] - 1 ? 0 : $index + 1;
}
// Записываем готовое значение
$result[] = array_values($value);
}
// Получаем массив, в котором попеременно чередуются все возможные комбинации
return $result;
}
Автор решения: Андрей Солуянов
→ Ссылка
<?php
$array = array(
"color" => array("Gray","Blue"),
"size" => array(1,2,3,4,5)
);
// В функицю подаем исходный массив вернет пересобраный
function foo($array_p)
{
$array2 = array();
foreach ($array_p["color"] as $value_color) {
foreach ($array_p["size"] as $value_size) {
$vrem = array();
array_push($vrem, $value_color, $value_size);
array_push($array2, $vrem);
}
}
return $array2;
}
var_dump(foo($array));
- Функция выбрала array(10) {
- [0]=> array(2) { [0]=> string(4) "Gray" [1]=> int(1) }
- [1]=> array(2) { [0]=> string(4) "Gray" [1]=> int(2) }
- [2]=> array(2) { [0]=> string(4) "Gray" [1]=> int(3) }
- [3]=> array(2) { [0]=> string(4) "Gray" [1]=> int(4) }
- [4]=> array(2) { [0]=> string(4) "Gray" [1]=> int(5) }
- [5]=> array(2) { [0]=> string(4) "Blue" [1]=> int(1) }
- [6]=> array(2) { [0]=> string(4) "Blue" [1]=> int(2) }
- [7]=> array(2) { [0]=> string(4) "Blue" [1]=> int(3) }
- [8]=> array(2) { [0]=> string(4) "Blue" [1]=> int(4) }
- [9]=> array(2) { [0]=> string(4) "Blue" [1]=> int(5) } }