Сгруппировать данные из вложенного массива
исходный массив:
$_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"
}