2012-11-22 108 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