Вы хотите сгруппировать результаты на основе значений uid
и установить некоторые значения по умолчанию - это можно сделать без стольких условий. Используйте isset()
, чтобы определить, встречается ли uid
впервые. Если это так, установите значения по умолчанию. Затем перезаписывайте значения по умолчанию при каждом последующем столкновении для того же uid
.
Код: ( Демо )
$values = [
['value' => 'Bettina', 'uid' => '7d1f4f8e906245f', 'name' => 'Voornaam'],
['value' => 'Les', 'uid' => '7d1f4f8e906245f', 'name' => 'Achternaam'],
['value' => 'Simone', 'uid' => '7d1f4f8e906245g', 'name' => 'Voornaam'],
['value' => 'Yül', 'uid' => '7d1f4f8e906245l', 'name' => 'Achternaam'],
['value' => 'Joshua', 'uid' => '7d1f4f8e906245s', 'name' => 'Voornaam'],
['value' => 'Mas', 'uid' => '7d1f4f8e906245s', 'name' => 'Achternaam'],
['value' => 'Hello', 'uid' => 'gGcYEJdRYJ1vqcn', 'name' => 'Achternaam'],
];
$list = ['Voornaam', 'Achternaam', 'Initialen'];
foreach ($values as $row) {
if (!isset($items[$row['uid']])) {
$items[$row['uid']] = array_fill_keys($list, ''); // if it needs to dynamically generated
$items[$row['uid']]['uid'] = $row['uid'];
}
$items[$row['uid']][$row['name']] = $row['value'];
}
var_export($items);
Выход:
array (
'7d1f4f8e906245f' =>
array (
'Voornaam' => 'Bettina',
'Achternaam' => 'Les',
'Initialen' => '',
'uid' => '7d1f4f8e906245f',
),
'7d1f4f8e906245g' =>
array (
'Voornaam' => 'Simone',
'Achternaam' => '',
'Initialen' => '',
'uid' => '7d1f4f8e906245g',
),
'7d1f4f8e906245l' =>
array (
'Voornaam' => '',
'Achternaam' => 'Yül',
'Initialen' => '',
'uid' => '7d1f4f8e906245l',
),
'7d1f4f8e906245s' =>
array (
'Voornaam' => 'Joshua',
'Achternaam' => 'Mas',
'Initialen' => '',
'uid' => '7d1f4f8e906245s',
),
'gGcYEJdRYJ1vqcn' =>
array (
'Voornaam' => '',
'Achternaam' => 'Hello',
'Initialen' => '',
'uid' => 'gGcYEJdRYJ1vqcn',
),
)
По правде говоря, если бы это было мое приложение, я бы написал сводный запрос и сделал бы все это в sql, чтобы значение fetchAll()
могло быть немедленно возвращено.