2014-11-06 143 views
0

假設您有一個帶有少量後端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

回答

1

假設你從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) 
    } 
} 
1

讓我們添加的所有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'] 
    ); 
}