多维数组到表或分割多维数组



很遗憾,我又遇到了一个小问题:-

我有一个多维数组从数据库现在我想把它写在一个表中,其中groupe值应该是列标头,所有记录具有相同的groupe值应该在列的行。

数组是按组排序的。

这里我的测试数组,原来有8个值在子数组,但我认为它会显示问题:

Array ( 
    [0] => Array 
        ( [0] => id [1] => name1 [2] => mail1 [3] => groupe1)
    [1] => Array 
        ( [0] => id2 [1] => name3 [2] => mail3 [3] => groupe1)
    [2] => Array 
        ( [0] => id3 [1] => name2 [2] => mail2 [3] => groupe2)
) 

表如下:

<table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>Groupe 1</td>
    <td>Groupe 2</td>
  </tr>
  <tr>
    <td>name1</td>
    <td>name2</td>
  </tr>
  <tr>
    <td>name3</td>
  </tr>
</table>

我认为解决方案是将groupes剥离为一维数组,删除重复项并通过标题循环。

然后按groupes拆分数组并循环遍历行…

但是无论我尝试什么,我都无法通过建模新的数组…也许你知道一个更简单的方法:)

您似乎遇到了一个常见的问题,您希望以列而不是行显示数据。解决方案是使用一个中间数组,在其中按组存储数据。

循环行,获取组,如果组不存在,创建数组。顺便说一下,你想计算一个组中的最大行数。更简单的方法是循环组数组并使用count和>。使用FOR循环达到最大值,如果一个组没有这个索引的数据(使用isset()),显示和空字符串,否则显示名称(或你想要的数据)。

你可以用2-3个循环…: D

好处:你可以通过在SQL查询中使用ORDER by group_id来优化这个算法,然后你可以直接在第一个循环中获得最大长度

明白了:-)

我认为这个解决方案可能不是最好的,但它有效,可以用于类似的情况。

我做了什么:

  1. 仅从数据数组中获取组值并使其唯一

  2. 将Data数组拆分为单独的组数组

下面是一个示例代码:
<?php
//Make test array Data;
$data = array();
$data[0][0] = 'Name1';
$data[0][1] = 'GroupeA';
$data[1][0] = 'Name2';
$data[1][1] = 'GroupeA';
$data[2][0] = 'Name3';
$data[2][1] = 'GroupeB';
print_r ($data);
echo ('</br>');
echo ('</br>');
//Get only all groupes from the data array and make it unique so every groupe is shown only once
//For the header and for counting.
$groups1 = array();
$groups2 = array();
$x = 0;
foreach($data as $value) {
$groups1[$x] = $value['1'];
$x ++;
}
$groups2 = array_unique($groups1); //Make unique so every groupe is shown only once in the array
$groups = array_values($groups2); // Renumber the Array Keys ( 0 to ?)
//Split the data array to seperate groupe arrays and give them auto names.
//So every Groupe has its own array called grpdata0 to grpdata?
$x = 0;
$x2 = 1;
$gr = count($groups);

while($gr>0) {
foreach($data as $value) {
if ($value[1] == $groups[$x]) {
${'grpdata' . $x}[$x2] = $value;
$x2++;
}
}
$gr--;
$x++;
}
// Renumber the array keys from the grpdata arrays ( 0 to ?)
$gr2 = count($groups)-1;
while($gr2>=0) {
${'grpdata' . $gr2} = array_values(${'grpdata' . $gr2});
$gr2--;
}
//Make the table
?>
<table border="1" cellspacing="0" cellpadding="0">
  <tr>
<?php //Make the header depending on the groups
  foreach($groups as $value) {
  echo ('<td><center>' . $value . '</center></td>');
  }?>
    </tr>
  <tr>
<?php // Make the columns (by groupe) and add the rows (with a helping table)
 $x = 0;
  foreach($groups as $value) { 
  echo ('<td valign="top">');
  foreach(${'grpdata' . $x} as $value) { ?>
  <table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td align="center"><?php echo $value[0]; ?></td>
  </tr>
</table>
  <?php
  }
  echo ('</td>');
  $x++;
  } ?>
</tr>
</table>

相关内容

  • 没有找到相关文章

最新更新