如何从杂乱的数据中创建php关联数组

问题描述:

假设您有一个带有少量后端php的html表单。该表格只有一个领域,它返回1或0。比如......如何从杂乱的数据中创建php关联数组

enter image description here

而且PHP脚本提供有关用户的操作系统的信息一起记录这个在MySQL数据库中。

因此,您可能会发现许多Windows8用户喜欢华夫饼,但没有太多Linux Mint用户。

“哦... 87%的Windows 8用户说是...这是我猜的。”

但是开发人员事先确实知道类别(即本例中的OS类型)并非。因此,实际的MySql表是一个混乱的响应(是或否)以及操作系统类型。可能绑定到一个自动增量整数的主键。为了让生活更轻松,有一个单独的属性,是和不是 - 每次用户说“是”时都会与他们说“不”时分开记录。数据可能如下所示:

ID | OS_type |是| NO

  1. Windows 7 | 1 |空值。
  2. Windows 8 | NULL | 1
  3. Windows 7 | NULL | 1
  4. Jellybean | 1 | NULL
  5. Windows 8 | NULL | 1
  6. Ubunto | 1 | NULL
  7. Iphone 4 | 1 | NULL
  8. Windows 7 | NULL | 1
  9. Jellybean | 1 | NULL

所以,问题试图从这个数据集自动获得某种连贯的细节时谈到。您不能简单地根据操作系统响应的键值对创建关联数组,因为有许多重复的操作系统键。真正需要创建一个唯一密钥的关联数组,不会丢失关键数据:在其创建过程中,“yes”和“no”数的计数将作为值附加到各个键上。如何才能做出这样的联想阵列呢?

+1

您的选项卡的这一模式乐是一点点intresting。为什么你没有列:like_waffeles,如果是,值是1,如果不是,则值为0. :) – vaso123 2014-11-06 12:59:20

+0

可能是因为(!是)并不意味着没有。它可能作为一个布尔值工作得很好 - 但要确保,以防万一在逻辑中我忽略了某些东西。 – Stumbler 2014-11-06 13:13:07

假设你从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'] 
    ); 
}