我有一些在数组中可用的数据。我必须以行和列的形式显示数据,如表格。 第一个数组$ header看起来像这样:
$header[0]=a, $header[1]=d, $header[2]=b, $header[3]=c, $header[4]=e
此数组可以包含任意数量的元素。后续数组代表我的表的行。他们看起来像这样,并且可以有任意数量的行:
$b[0]=3,$c[0]=4,$a[0]=1,$d[0]=2,$e[0]=5 (in random order)
$c[1]=4,$e[1]=5,$a[1]=1,$b[1]=3,$d[1]=2 (in random order)
$a[2]=5,$b[2]=15,$c[2]=20,$e[2]=25 (in random order and missing an element)
$a[3]=10,$b[3]=30,$c[3]=40,$bananas[3]=25 (random, missing and extra)
$c[4]=4,$e[4]=5,$c[4]=1,$b[4]=3,$d[4]=2,$a[4]=1 (random and duplicate)
我想确定每个行中数组的名称,并重新排序它们,使它们根据标题数组中的值出现在列中,以便标题数组值与行数组名称匹配,并且行数组值放在正确的列中。为了说明,上面的数据会产生这样的结果:
a,d,b,c,e
1,2,3,4,5
1,2,3,4,5
5,,15,20,25
10,,30,40,
1,2,3,5,5
规则:
另一个例子:
$header[0]=apple, $header[1]=banana, $header[3]=grape, $header4=fruit
$banana[0]=yellow, $grape[0]=purple, $apple[0]=red, $fruit[0]=fresh
$grape[1]=cluster, $fruit[1]=bag, $apple[1]=bushel, $banana[1]=bunch
$grape[2]=cluster, $fruit[2]=bag, $banana[2]=bunch, $fruit[2]=crunchy, $extra[2]=new
会产生
apple, banana, grape, fruit
red, yellow, purple, fresh
bushel, bunch, cluster, bag
, bunch, cluster, bag~crunchy
我会发布一些代码,但我不知道如何开始
答案 0 :(得分:0)
所以这里主要是工作,我不明白的部分是你如何确定副本,如你设置$fruit[2]='bag';
然后设置$fruit[2]='crunchy';
它实际上会被覆盖所以它将是好像$fruit[2]='bag';
从未执行过
示例代码
$header[0]= 'apple'; $header[1]='banana'; $header[3]='grape'; $header[4]='fruit';
$banana[0]='yellow'; $grape[0]='purple'; $apple[0]='red'; $fruit[0]='fresh';
$grape[1]='cluster'; $fruit[1]='bag'; $apple[1]='bushel'; $banana[1]='bunch';
$grape[2]='cluster'; $fruit[2]='bag'; $banana[2]='bunch'; $fruit[2]='crunchy'; $extra[2]='new';
$rows = [];
$maxRows = 0;
$headerSize = sizeOf($header);
$z = 0;
foreach($header as $index => $name) {
$rows[0][] = $name;
if (isset($$name)) {
$x = 0;
foreach($$name as $index2 => $name2) {
++$x;
if (false === isset($rows[$x])) {
for($y = 0; $y < $headerSize; $y++) {
$rows[$x][$y] = null;
}
}
if (isset($rows[$x][$z])) {
$rows[$x][$z] .= '~' . $name2;
} else {
$rows[$x][$z] = $name2;
}
}
}
$z++;
}
foreach($rows as $row) {
echo implode(', ', $row) . PHP_EOL;
}
输出
apple, banana, grape, fruit
red, yellow, purple, fresh
bushel, bunch, cluster, bag
, bunch, cluster, crunchy