Предположим, что у вас есть html-форма с небольшим количеством бэкэндов php. Форма имеет только одно поле, которое возвращает 1 или 0. Например...
И php-скрипт записывает это в базу данных MySQL вместе с информацией об пользовательской ОС.
Таким образом, вы можете обнаружить, что многие пользователи Windows8, такие как вафли, но не так много пользователей Linux Mint.
"Ох... 87% пользователей Windows 8 сказали" да "... это то, что я думаю".
Но классы (а именно, в данном случае, тип ОС) заранее не известны разработчику. Таким образом, фактическая таблица MySql представляет собой грязную конгломерацию ответа (да или нет) вместе с типом ОС; возможно связанный с первичным ключом, который является автоинкрементным целым числом. Чтобы облегчить жизнь, существует отдельный атрибут yes и no -so, который каждый раз, когда пользователь говорит "да", записывается отдельно, когда говорят "нет". Данные могут выглядеть примерно так:
ID | OS_type | ДА | НЕТ
и так далее
Поэтому проблема возникает, когда вы пытаетесь автоматически получить какую-то связную деталь из этого набора данных. Вы не можете просто создать ассоциативный массив на основе пары значений ключа-значения OS-response, поскольку имеется много дублирующих ключей ОС. На самом деле необходимо создать ассоциативный массив уникальных ключей, которые не потеряют критические данные: в его создании подсчет числа "да" и "нет" будет привязан как значения к соответствующим клавишам. Как можно создать такой ассоциативный массив?
Предполагая, что вы захватываете весь набор данных из MySQL (т.е. "SELCET * FROM waffles" в массив $ waffleResponse)
$resultSet = array();
foreach($waffleResponse as $r)
{
if (!array_key_exists($r['OS_type'], $resultSet))
{
$resultSet[$r['OS_type']] = array(
'YES'=>0,
'NO'=>0
);
}
$resultSet[$r['OS_type']]['YES'] += $r['YES'];
$resultSet[$r['OS_type']]['NO'] += $r['NO'];
}
var_dump($resultSet);
Выпустил бы:
array(5) {
["Windows 7"]=>
array(2) {
["YES"]=>
int(1)
["NO"]=>
int(2)
}
["Windows 8"]=>
array(2) {
["YES"]=>
int(0)
["NO"]=>
int(2)
}
["Jellybean"]=>
array(2) {
["YES"]=>
int(2)
["NO"]=>
int(0)
}
["Ubunto"]=>
array(2) {
["YES"]=>
int(1)
["NO"]=>
int(0)
}
["Iphone 4"]=>
array(2) {
["YES"]=>
int(1)
["NO"]=>
int(0)
}
}
Позвольте добавить весь ключ ОС из вашего результирующего набора в качестве ключа, а затем добавить все строки в качестве нового вспомогательного массива к этому ключу:
$results = array();
while ($row = mysqli_fetch_assoc($res) ) {
if (!array_key_exists('OS_type', $row)) {
//Creating an array key for the os type with an empty array
$results[$row['OS_type']] = array();
}
$results[$row['OS_type']][] = array(
'id' => $row['id'],
'yes' => $row['YES'],
'no' => $row['NO']
);
}