Сгруппировать данные из вложенного массива

исходный массив:

$_POST['data'](Array
(
    [1] => Array
        (
            [0] => 6.1.1
            [1] => 6.1.2
            [2] => 6.1.3
            [3] => 6.1.4
            [4] => 6.1.5
            [5] => 6.1.6
            [6] => 6.1.7
        )

    [7] => Array
        (
            [2] => 6.7.3
        )

    [3] => Array
        (
            [0] => 6.3.1
            [1] => 6.3.2
            [2] => 6.3.3
        )

    )
)

из которого нужно получить данные в таком виде:

$result(Array
(
    [1] => 1,2,3,4,5,6,7
    [7] => 3
    [3] => 1,2,3
)

мои действия:

$new_array=[];
foreach ($_POST['data'] as $key1 => $val1):
    
    $q=null;//запятая
    foreach($val1 AS $key2 => $val2):

        $exp2val=explode('.', $val2,3);
            
        $new_array[$exp2val[1]].=$q.$exp2val[2];
        $q=',';

    endforeach;

endforeach;

на выходе получаю:

$new_array(Array
(
    [1] => 1,2,3,4,5,6,7
    [7] => 3
    [3] => 1,2,3
)

и это, то что нужно но вместе с этим результатом получаю предупреждение

(Warning: Undefined array key 1)
(Warning: Undefined array key 7)
(Warning: Undefined array key 3)

и эти предупреждения вылазят из-за этой строки:

$new_array[$exp2val[1]].=$q.$exp2val[2];

не понимаю что я делаю не так?

в итоге должна получится строка в таком виде

1:1,2,3,4,5,6,7;7:3;3:1,2,3

Ответы (1 шт):

Автор решения: Алексей Р

Операция x[key].=y равносильна x[key]=x[key].y, при этом x[key] до этого у вас не был определен, отсюда и предупреждение. Заведите, например, временную переменную $tmp, которую до начала цикла инициализируйте пустой строкой, а после цикла присвойте полученное значение нужному элементу массива $new_array[$exp2val[1]]=$tmp;

$_data = 
    [
    1 => [
            0 => "6.1.1",
            1 => "6.1.2",
            2 => "6.1.3",
            3 => "6.1.4",
            4 => "6.1.5",
            5 => "6.1.6",
            6 => "6.1.7"
        ],

    7 => [
            2 => "6.7.3"
        ],

    3 => [
            0 => "6.3.1",
            1 => "6.3.2",
            2 => "6.3.3"
        ]

    ];
$new_array=[];
foreach ($_data as $key1 => $val1):
    
    $q = $tmp = ""; //будущая запятая и временная переменная инициализируются пустой строкой
    foreach($val1 AS $key2 => $val2):

        $exp2val=explode('.', $val2,3);
        
        $tmp.=$q.$exp2val[2];    
        $q=',';
    $new_array[$exp2val[1]]=$tmp;

    endforeach;

endforeach;
var_dump($new_array);
array(3) {
  [1]=>
  string(13) "1,2,3,4,5,6,7"
  [7]=>
  string(1) "3"
  [3]=>
  string(5) "1,2,3"
}
→ Ссылка