如何从杂乱的数据中创建php关联数组
问题描述:
假设您有一个带有少量后端php的html表单。该表格只有一个领域,它返回1或0。比如......如何从杂乱的数据中创建php关联数组
而且PHP脚本提供有关用户的操作系统的信息一起记录这个在MySQL数据库中。
因此,您可能会发现许多Windows8用户喜欢华夫饼,但没有太多Linux Mint用户。
“哦... 87%的Windows 8用户说是...这是我猜的。”
但是开发人员事先确实知道类别(即本例中的OS类型)并非。因此,实际的MySql表是一个混乱的响应(是或否)以及操作系统类型。可能绑定到一个自动增量整数的主键。为了让生活更轻松,有一个单独的属性,是和不是 - 每次用户说“是”时都会与他们说“不”时分开记录。数据可能如下所示:
ID | OS_type |是| NO
- Windows 7 | 1 |空值。
- Windows 8 | NULL | 1
- Windows 7 | NULL | 1
- Jellybean | 1 | NULL
- Windows 8 | NULL | 1
- Ubunto | 1 | NULL
- Iphone 4 | 1 | NULL
- Windows 7 | NULL | 1
- Jellybean | 1 | NULL
等
所以,问题试图从这个数据集自动获得某种连贯的细节时谈到。您不能简单地根据操作系统响应的键值对创建关联数组,因为有许多重复的操作系统键。真正需要创建一个唯一密钥的关联数组,不会丢失关键数据:在其创建过程中,“yes”和“no”数的计数将作为值附加到各个键上。如何才能做出这样的联想阵列呢?
答
假设你从MySQL抓住了整个数据集(即 “SELCET * FROM华夫饼干” 到$ 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)
}
}
答
让我们添加的所有OS键从你的结果设定为一个键,然后添加所有行,为新的副阵列到关键:
$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']
);
}
您的选项卡的这一模式乐是一点点intresting。为什么你没有列:like_waffeles,如果是,值是1,如果不是,则值为0. :) – vaso123 2014-11-06 12:59:20
可能是因为(!是)并不意味着没有。它可能作为一个布尔值工作得很好 - 但要确保,以防万一在逻辑中我忽略了某些东西。 – Stumbler 2014-11-06 13:13:07