У меня есть массив с массивами, представляющими значения в базе данных.
В таблице db более 100 столбцов, поэтому фактическое количество намного выше, чем в приведенном ниже примере из 6 значений, подмассив (массив внутри массива) с индексом 0-5.
Столбцы находятся в каждом индексе подмассива, а строки - в каждом индексе основного массива.
Вот мой основной массив с подмассивами:
Array
(
[0] => Array
(
[0] => N
[1] => N
[2] => Y
[3] => Y
[4] => Y
[5] => Y
)
[1] => Array
(
[0] => N
[1] => N
[2] => Y
[3] => Y
[4] => N
[5] => Y
)
[2] => Array
(
[0] => N
[1] => N
[2] => Y
[3] => Y
[4] => N
[5] => Y
)
[3] => Array
(
[0] => Y
[1] => Y
[2] => Y
[3] => Y
[4] => Y
[5] => Y
)
Что мне нужно сделать, так это объединить все значения каждого субиндекса в один массив следующим образом:
Array
(
[0] => N,N,N,Y
[1] => N,N,N,Y
[2] => Y,Y,Y,Y
[3] => Y,Y,Y,Y
[4] => Y,N,N,Y
[5] => Y,Y,Y,Y
)
Всегда будет одно и то же количество столбцов (субиндекс), но будет разное количество строк (индекс).






Идея состоит в том, чтобы получать данные по столбцам, вам повезло, для этого есть встроенная функция. Его array_column.
Итак, сначала получите количество столбцов и просто используйте для этого цикл for. Затем просто используйте implode и назначьте его внутри нового контейнера:
$new = array(); // container
$count = count($arr[0]); // get the number of colums
for ($i = 0; $i < $count; $i++) {
// get the data by column number ($i), then implode and push inside
$new[] = implode(',', array_column($arr, $i));
}
Вот образец выход
@Yourguide рад, что это помогло
Я предполагаю, что вы определили $column как общее количество столбцов в вашей таблице db. Используйте array_column, чтобы получить значение в соответствии с ключом столбца.
$result = array();
for ($i = 0; $i < $column; $i++) {
$res = array_column($arr, $i);
$result[] = implode(",", $res);
}
Для получения дополнительной информации о функции array_column проверьте этот ссылка на сайт.
О, просто чтобы вы знали, что функция array_column работает только для PHP 5.5 и выше.
проверьте, если это то, что вы хотите
$arr = array(//your array);
$newArr = array(); //data wil lbe saved here
foreach($arr as $arr_one){
$string = "";
foreach($arr_one as $subArr){
$string.=$subArr.",";
}
array_push($newArr,rtrim($string,','));
}
var_dump($newArr);
Избегайте использования явных циклов, таких как for и while. Используйте array_map (для обхода может потребоваться переменное количество массивов):
$result = array_map(function (...$column) {
return implode(',', $column);
}, ...$array);
Вот демо.
Кстати, в линейная алгебра это называется транспонировать матрицы.
Ты настоящий рок-чувак! Большое спасибо. Это прекрасно работает!