0

提前感谢您的关注。

我正在尝试使用带有几层数组的 foreach 循环构建一些 HTML。

数据组和该数据的标题组存储在数组集中。反过来,这些数据数组存储在数组 ($titlegroupsdatagroups) 中。

目的是建立一个嵌套循环,其中每组数据和标题填充一些 html 中的相关字段。

这是我尝试的一整套代码(结构)。

$a=1;
$b=2;
$c=3;
$d=4;


$titlesA=array('string1','string2');
$titlesB=array('string3','string4');

$dataA=array($a,$b);
$dataB=array($c,$d);

$titlegroups=array($titlesA,$titlesB);
$datagroups=array($dataA,$dataB);
$groups=array(array_combine($titlegroups, $datagroups));

$j=0;   
foreach($groups as $titlesX => $dataX)
    {
        $j++;
        echo'<div class="something">';

        $i=0;
        foreach(array_combine($titlesX, $dataX) as $title => $var)
            {
            $i++;
            echo '
                    <li>'.$title.'</li><input name="'.$j.'x'.$i.'" value="'.$var.'" />
                ';
            }
        echo '</div>';
    }

在ideone中检查它我得到了错误:

警告:array_combine() 期望参数 1 是数组,整数在第 26 行的 /home/0zw0mb/prog.php 中给出

第 26 行是:

foreach(array_combine($titlesX, $dataX) as $title => $var)

但是 $titlesX 和 $dataX 都应该是数组?

如果有人能让我直截了当,我将不胜感激。谢谢。

4

1 回答 1

0

您不能将数组作为键,它们被转换为字符串。您的逻辑需要一些更改和一个额外的标记变量 ( $idx),以判断代码何时跨组到另一组。

array_merge由于阵列的关键要求,这是必要的。

检查以下代码:

$a=1;
$b=2;
$c=3;
$d=4;


$titlesA=array('string1','string2');
$titlesB=array('string3','string4');

$dataA=array($a,$b);
$dataB=array($c,$d);

$titlegroups=array_merge($titlesA,$titlesB);
$datagroups=array_merge($dataA,$dataB);

$items=array_combine($titlegroups, $datagroups);

$indexes = array(count($dataA), count($dataB));

$i = 0;
$j = 0;
$idx = $indexes[$j];

echo '<div class="something">';

foreach($items as $title => $var)
    {
            echo '
                    <li>'.$title.'</li><input name="'.$j.'x'.($i++).'" value="'.$var.'" />
                ';
        $idx--;

        if ($idx == 0) {
            /* End of a group */
            echo '</div>';
            $idx = $indexes[++$j];

            /* If there is another group, create new container */
            if ($idx != null) {
                echo '<div class="something">';
            }
        }
    }
于 2012-11-22T01:42:36.617 回答