Php объединить значения массива в новый массив php

У меня есть массив с массивами, представляющими значения в базе данных.

В таблице 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
)

Всегда будет одно и то же количество столбцов (субиндекс), но будет разное количество строк (индекс).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
118
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Идея состоит в том, чтобы получать данные по столбцам, вам повезло, для этого есть встроенная функция. Его 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 19.07.2018 07:10

@Yourguide рад, что это помогло

Kevin 19.07.2018 08:11

Я предполагаю, что вы определили $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);

Вот демо.

Кстати, в линейная алгебра это называется транспонировать матрицы.

Другие вопросы по теме