Объединение ключей массива по группам

185
13 августа 2018, 02:10

Имеется массив полей формы, где каждое поле представлено в виде уникального подмассива:

Array 
( 
[0] => Array 
    ( 
        [name] => field1 
        [value] => гендир 
    ) 
 
[1] => Array 
    ( 
        [name] => field2 
        [value] => Виктор 
    ) 
 
[2] => Array 
    ( 
        [name] => field1 
        [value] => секретарь 
    ) 
 
[3] => Array 
    ( 
        [name] => field2 
        [value] => Юлия 
    ) 
 
[4] => Array 
    ( 
        [name] => field1 
        [value] => дворник 
    ) 
 
[5] => Array 
    ( 
        [name] => field2 
        [value] => Вася 
    ) 
)

Необходимо получить следующий массив:

Array 
( 
[0] => Array 
( 
	[0] => Array 
		( 
			[name] => field1 
			[value] => гендир 
		) 
 
	[1] => Array 
		( 
			[name] => field2 
			[value] => Виктор 
		) 
) 
[1] => Array 
( 
	[0] => Array 
		( 
			[name] => field1 
			[value] => секретарь 
		) 
 
	[1] => Array 
		( 
			[name] => field2 
			[value] => Юлия 
		) 
) 
[2] => Array 
( 
	[0] => Array 
		( 
			[name] => field1 
			[value] => дворник 
		) 
 
	[1] => Array 
		( 
			[name] => field2 
			[value] => Вася 
		) 
) 
)
Т.е. необходимо при повторении ключа и значения выделить все нижеследующие элементы (включая повторяющийся ключ:значение) в отдельный подмассив. Каким образом можно выполнить подобное преобразование средствами PHP?

Answer 1

Для получения желаемого результата вам следует реализовать цикл, в котором проверять имя поля. И когда оно равно field1 следует переключать индекс результирующего массива.

$result = [];
$idx = 0;
foreach($data as $d){
    if($d['name'] == "field1"){
        $idx++;
        $v = [];
    }
    $result[$idx][] = $d;
}

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

[1] => Array (
        [field1] => гендир
        [field2] => Виктор
    )
[2] => Array (
        [field1] => секретарь
        [field2] => Юлия
    )
[3] => Array (
        [field1] => дворник
        [field2] => Вася
    )

что получается при замене основной рабочей строки цикла на

$result[$idx][$d['name']] = $d['value'];
READ ALSO
PHP сбрасывается число в кэше

PHP сбрасывается число в кэше

Сделал элементарный подсчёт просмотров страниц:

192
CMake не видит компилятора

CMake не видит компилятора

Поставил CMake (без CLang), добавил в переменную path путь к cmake-39

203
Ошибка при компиляции на XCode

Ошибка при компиляции на XCode

Уже несколько дней не могу разобраться с проблемой, вот код:

159