2013-01-22 37 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) 
相关问题