php将数组名称与另一个数组的值匹配

时间:2015-06-05 16:43:07

标签: php arrays match

我有一些在数组中可用的数据。我必须以行和列的形式显示数据,如表格。 第一个数组$ 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

规则:

  • 标题 - 按索引确定的顺序
  • random - 重新排序以匹配标题顺序
  • 缺失 - 在该列中显示空白或空值
  • extra - 被忽略
  • 复制 - 如果是数字,则添加,如果是alpha,则使用〜
  • 连接

另一个例子:

$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

我会发布一些代码,但我不知道如何开始

1 个答案:

答案 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