嵌套循环与数组的关联数组,不获取任何输出(PHP)

嵌套循环与数组的关联数组,不获取任何输出(PHP),php,arrays,loops,Php,Arrays,Loops,提前感谢您的关注 我正在尝试使用带有几层数组的foreach循环来构建一些HTML 数据组和该数据的标题组存储在一组数组中。 反过来,这些数据数组存储在一个数组中($titlegroups和数据组) 其目的是建立一个嵌套循环,其中每组数据和标题填充一些html中的相关字段 下面是我尝试的一整套代码(结构) $a=1; $b=2; $c=3; $d=4; $titlesA=array('string1','string2'); $titlesB=array('string3','string4

提前感谢您的关注

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

数据组和该数据的标题组存储在一组数组中。 反过来,这些数据数组存储在一个数组中(
$titlegroups
数据组

其目的是建立一个嵌套循环,其中每组数据和标题填充一些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>';
    }
但是$titlesX和$dataX都应该是数组吗


如果有人能纠正我的错误,我将不胜感激。谢谢。

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

由于阵列的关键要求,
array\u 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">';
            }
        }
    }
$a=1;
$b=2;
$c=3;
$d=4;
$titlesA=数组('string1','string2');
$titlesB=数组('string3','string4');
$dataA=数组($a,$b);
$dataB=数组($c,$d);
$titlegroups=array\u merge($titlesA,$titlesB);
$datagroups=array\u merge($dataA,$dataB);
$items=array\u combine($titlegroups,$datagroups);
$index=array(count($dataA),count($dataB));
$i=0;
$j=0;
$idx=$index[$j];
回声';
foreach($title=>$var的项目)
{
回声'
  • “.$title。”
  • '; $idx--; 如果($idx==0){ /*小组结束*/ 回声'; $idx=$index[+$j]; /*如果存在其他组,请创建新容器*/ 如果($idx!=null){ 回声'; } } }
    非常感谢-我已经做了调整,但似乎没有解决核心问题。啊,你的编辑解释得很好,谢谢。我会研究一下,然后做些改变。嗨。用最少的代码更改来解决原始问题带来了一个学习主题:数组键(馈送到
    array\u combine
    )有要求(不能是数组)。即使有一个不那么“可读”的工作代码,我们也学到了一些东西。我能看到你(迟到)的愤怒,但看不到你的动机。但这毕竟是一个言论自由的网站。。。
    $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">';
                }
            }
        }