2013-01-22 132 views
0

我已經產生了「主」陣列,其看起來有點像這樣的表PHP:陣列具有不同的密鑰=>值對成

Array ([userID] => 152 [email] => [email protected] [name] => Jay jay go go [stream] => 616) 
Array ([userID] => 133 [email] => [email protected] [name] => Damian T [stream] => 616) 
Array ([userID] => 154 [email] => [email protected] [name] => Julie1000 E [stream] => 615 [PROGRAMME] => Designer) 
Array ([userID] => 153 [email] => [email protected] [name] => James1000 G [stream] => 616 [PROGRAMME] => Apple Develpepr) 

這是從一個循環通過單個陣列的輸出,所以這些4個陣列都具有鍵0 - 3

我的問題是,我想一個表格製作,以容納所有這些數據,與代表用戶的每一行,但數組鍵可能會稍有不同。例如,前2個用戶沒有「程序」數組鍵/值,但我希望在那裏有一個說「程序」的列,但對於沒有在其數組中使用此列的用戶而言,它是空的。

希望是有道理的。

+0

你需要或者過度補償你的數據庫來存儲並不總是使用其他列,或使用NoSQL的用於存儲用戶提供廣泛的範圍提供了更靈活的存儲機制屬性 – Bryan

回答

2

這可以通過合併所有這些陣列的一個陣列來實現。循環訪問數組中的每個項目,收集密鑰(in_array可能有幫助)。循環訪問您的鍵盤陣列以打印出表格中的所有列標題,然後當您的腳本需要輸出數組時,您可以簡單地在每個人中循環運行,在每個屬性映射到列時遍歷每個屬性。這是抽象的,但我認爲你可以填寫其餘部分。祝你好運!

+1

是的,我剛纔一直在尋找和思考類似的東西,通過在打印出標題後循環,並說「如果這個數組鍵是等於標題,然後添加值」的東西?我會去的,謝謝! – JamesG

+1

如果您遇到困難或需要更多具體信息,請告知我。我認爲你將不得不在最初的循環中取出你的密鑰。我沒有看到解決辦法。 – cr125rider

1

你可以做列的列表在表中包括,然後爲每個用戶,使用isset檢查是否存在爲每列的值:

$columnNames = array('userID', 'email', 'name', 'stream', 'PROGRAMME'); 

foreach ($users as $user) { 
    echo '<tr>'; 
    foreach ($columnNames as $columnName) { 
     echo '<td>'; 
     if (isset($user[$columnName])) { 
      echo htmlspecialchars($user[$columnName]); 
     } 
     echo '</td>'; 
    } 
    echo '</tr>'; 
} 
1

如果我沒搞錯的問題,通過這樣做,您可以使用最大數組鍵創建新數組;

$data = array(
    array('userID' => 152, 'email' => '[email protected]', 'name' => 'Jay jay go go', 'stream' => 616), 
    array('userID' => 133, 'email' => '[email protected]', 'name' => 'Damian T', 'stream' => 616), 
    array('userID' => 154, 'email' => '[email protected]', 'name' => 'Julie1000 E', 'stream' => 615, 'PROGRAMME' => 'Designer'), 
    array('userID' => 153, 'email' => '[email protected]', 'name' => 'James1000 G', 'stream' => 616, 'PROGRAMME' => 'Apple Develpepr'), 
); 
$max_len = null; 
$max_arr = null; 
// First we find max array to grab its keys 
foreach ($data as $i => $a) { 
    $len = count($a); 
    if ($max_len === null || $len > $max_len) { 
     $max_len = $len; 
     $max_arr = $data[$i]; 
    } 
} 
$max_arr_keys = array_keys($max_arr); 
$data_new = array(); 
foreach ($data as $i => $a) { 
    // and using max array keys here 
    foreach ($max_arr_keys as $k) { 
     // key exists? get value, or set as NULL 
     $data_new[$i][$k] = isset($a[$k]) ? $a[$k] : null; 
    } 
} 
print_r($data_new); 

輸出應該看起來像這樣;

Array ([userID] => 152 [email] => [email protected] [name] => Jay jay go go [stream] => 616 [PROGRAMME] => null) 
Array ([userID] => 133 [email] => [email protected] [name] => Damian T [stream] => 616 [PROGRAMME] => null) 
Array ([userID] => 154 [email] => [email protected] [name] => Julie1000 E [stream] => 615 [PROGRAMME] => Designer) 
Array ([userID] => 153 [email] => [email protected] [name] => James1000 G [stream] => 616 [PROGRAMME] => Apple Develpepr)