我有两个总是具有相同长度的数组:
$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是数字,空格可以为零。
答案 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