需要有关如何使用数组操作来创建表的帮助吗?

时间:2015-09-02 16:58:55

标签: php html arrays sorting multidimensional-array

我有两个总是具有相同长度的数组:

$unit = array('a','b','c','d','a','b','d');
$type = array('x','y','z','x','y','z','x');

也可能有更多类型的单位或类型。例如:单位可能是5而不是4(a,b,c,d)或类型可能是5而不是3(x,y,z)。但是两个数组的长度是相同的。

现在有了这些数据,我想创建一个这样的表:

   x     y     z     
a  1     1  
b        1     1
c              1
d  2

到目前为止我做了什么:

$TYPE = array_values(array_unique($type));
$UNIT = array_values(array_unique($unit));

这两个将提供第一列和第一行。

echo "<table border='1' cellpadding='5' cellspacing='0' style='border-collapse:collapse;'>"; 
   echo "<tr><td>" . '  '  . "</td>";
   $lengthtype = count($TYPE);
   for($i=0; $i<$lengthtype; $i++)
   {
       echo "<td>" . $TYPE[$i] . "</td>";
   }
   echo "</tr>";        
   $unitlength = count($UNIT);
   for($i=0; $i<$unitlength;$i++)
   {
     echo "<tr>";
     echo "<td>" . $UNIT[$i] . "</td>";
     echo "</tr>";
   }  
echo "</table>";

我想我需要将两者结合起来创建2D数组,所以我这样做了:

$newarray = array();
foreach($type as $key=>$val)
{
    $newarray[$key][]=$val;
    $newarray[$key][]=$unit[$key];
}

现在我无法确定有效的方法是什么?

如果你们能提供任何好的提示。

更新:

我的问题是如何在第二个块中创建一个表。要清楚的是,1和2是数字,空格可以为零。

1 个答案:

答案 0 :(得分:3)

这应该适合你:

一开始你可以使用for循环一次遍历两个数组并创建一个数组,其中每个$TYPE是subArray的关键,并且在每个subArray中你计算$UNIT出现的Array ( //↓ Each '$TYPE' [x] => Array ( [a] => 1 [d] => 2 //↑ ↑ Amount //Each '$UNIT', which occurs at the same position as this type ) [y] => Array ( [b] => 1 [a] => 1 ) [z] => Array ( [c] => 1 [b] => 1 ) ) 在同一个位置。

表示你创建一个这样的数组:

$UNITS

在此之后,它只是根据需要打印数据。为此,您循环浏览array_unique()获得的所有唯一$TYPE。对于每个单元,您循环遍历所有唯一<?php $UNIT = array('a','b','c','d','a','b','d'); $TYPE = array('x','y','z','x','y','z','x'); $count = []; for($i = 0, $length = count($UNIT); $i < $length; $i++) { if(!isset($count[$TYPE[$i]][$UNIT[$i]])) $count[$TYPE[$i]][$UNIT[$i]] = 0; $count[$TYPE[$i]][$UNIT[$i]]++; } echo "<table border='1' cellpadding='5' cellspacing='0' style='border-collapse:collapse;'>"; echo "<tr><td></td><td>" . implode("</td><td>", array_unique($TYPE)) . "</td></tr>"; foreach(array_unique($UNIT) as $key){ echo "<tr><td>$key</td>"; foreach(array_unique($TYPE) as $v) echo "<td>" . (isset($count[$v][$key]) ? $count[$v][$key] : "") . "</td>"; echo "<tr>"; } echo "</table>"; ?> 。在那里你只需检查数组中是否有元素并打印出来。

代码:

    x   y   z
a   1   1   
b       1   1
c           1
d   2       

输出:

/etc/init.d