2012-11-22 56 views
0

预先感谢您的期待。嵌套循环与数组的关联数组,获取无输出(PHP)

我想建立一些HTML使用foreach循环与几层数组。

该数据的数据组和标题组存储在数组集合中。 反过来,这些数据数组存储在一个数组中($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我得到的错误:

Warning: array_combine() expects parameter 1 to be array, integer given in /home/0zw0mb/prog.php on line 26

第26行是:

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

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

如果任何人都可以直接设置我,我会很感激。谢谢。

+0

至少你确定你自己。我可以看到你的(后期)愤怒,但不是动机。但是,这是一个免费的演讲网站... – Niloct

回答

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">'; 
      } 
     } 
    } 
+0

非常感谢这一点 - 我做了这个调整,但它似乎并没有解决中心问题。 – Gideon

+0

啊,你的编辑解释得很好,谢谢。我会研究这个并做出改变。 – Gideon

+0

嗨。用最少的代码修改解决原始问题带来了一个学习主题:数组键(提供给'array_combine')有要求(不能是数组)。即使**工作**代码不那么“可读”,我们也学到了一些东西。 – Niloct