Php 如何使用SMARTY创建具有多维数组的HTML表?

Php 如何使用SMARTY创建具有多维数组的HTML表?,php,html,arrays,smarty,Php,Html,Arrays,Smarty,请参阅底部以查看最新的代码 我最挣扎的地方是处理这种特定类型的数组。见下文。使用PHP中的var\u dump显示。下面您将看到3组值。我希望能够用这些数据创建三列。然后,这些值填充行 array(3) { [0]=> array(28) { [0]=> string(4) "2160" [1]=> string(5) "63800" [2]=> string(6) "175820" [3]=> string(6) "234823" [4]=> string(

请参阅底部以查看最新的代码

我最挣扎的地方是处理这种特定类型的数组。见下文。使用PHP中的
var\u dump
显示。下面您将看到3组值。我希望能够用这些数据创建三列。然后,这些值填充行

array(3) { [0]=> array(28) { [0]=> string(4) "2160" [1]=> string(5) "63800" [2]=> string(6) "175820" [3]=> string(6) "234823" [4]=> string(6) "253080" [5]=> string(6) "256680" [6]=> string(6) "258760" [7]=> string(6) "258840" [8]=> string(6) "259560" [9]=> string(6) "258480" [10]=> string(6) "258550" [11]=> string(6) "258660" [12]=> string(6) "258480" [13]=> string(6) "258300" [14]=> string(6) "256140" [15]=> string(6) "257770" [16]=> string(6) "255960" [17]=> string(6) "255780" [18]=> string(6) "252520" [19]=> string(6) "253980" [20]=> string(6) "252540" [21]=> string(6) "250560" [22]=> string(6) "245700" [23]=> string(6) "253080" [24]=> string(6) "248580" [25]=> string(6) "248860" [26]=> string(6) "249660" [27]=> string(6) "246780" } [1]=> array(34) { [0]=> array(28) { [0]=> string(4) "2160" [1]=> string(5) "63800" [2]=> string(6) "175820" [3]=> string(6) "234823" [4]=> string(6) "253080" [5]=> string(6) "256680" [6]=> string(6) "258760" [7]=> string(6) "258840" [8]=> string(6) "259560" [9]=> string(6) "258480" [10]=> string(6) "258550" [11]=> string(6) "258660" [12]=> string(6) "258480" [13]=> string(6) "258300" [14]=> string(6) "256140" [15]=> string(6) "257770" [16]=> string(6) "255960" [17]=> string(6) "255780" [18]=> string(6) "252520" [19]=> string(6) "253980" [20]=> string(6) "252540" [21]=> string(6) "250560" [22]=> string(6) "245700" [23]=> string(6) "253080" [24]=> string(6) "248580" [25]=> string(6) "248860" [26]=> string(6) "249660" [27]=> string(6) "246780" } [1]=> string(4) "2160" [2]=> string(5) "63800" [3]=> string(6) "175820" [4]=> string(6) "234823" [5]=> string(6) "253080" [6]=> string(6) "256680" [7]=> string(6) "258760" [8]=> string(6) "258840" [9]=> string(6) "259560" [10]=> string(6) "258480" [11]=> string(6) "258550" [12]=> string(6) "258660" [13]=> string(6) "258480" [14]=> string(6) "258300" [15]=> string(6) "256140" [16]=> string(6) "257770" [17]=> string(6) "255960" [18]=> string(6) "255780" [19]=> string(6) "252520" [20]=> string(6) "253980" [21]=> string(6) "252540" [22]=> string(6) "250560" [23]=> string(6) "245700" [24]=> string(6) "253080" [25]=> string(6) "248580" [26]=> string(6) "248860" [27]=> string(6) "249660" [28]=> string(6) "246780" [29]=> string(4) "2150" [30]=> string(5) "63800" [31]=> string(6) "175420" [32]=> string(6) "234843" [33]=> string(6) "253080" } [2]=> array(41) { 

[0]=> array(28) { [0]=> string(4) "2160" [1]=> string(5) "63800" [2]=> string(6) "175820" [3]=> string(6) "234823" [4]=> string(6) "253080" [5]=> string(6) "256680" [6]=> string(6) "258760" [7]=> string(6) "258840" [8]=> string(6) "259560" [9]=> string(6) "258480" [10]=> string(6) "258550" [11]=> string(6) "258660" [12]=> string(6) "258480" [13]=> string(6) "258300" [14]=> string(6) "256140" [15]=> string(6) "257770" [16]=> string(6) "255960" [17]=> string(6) "255780" [18]=> string(6) "252520" [19]=> string(6) "253980" [20]=> string(6) "252540" [21]=> string(6) "250560" [22]=> string(6) "245700" [23]=> string(6) "253080" [24]=> string(6) "248580" [25]=> string(6) "248860" [26]=> string(6) "249660" [27]=> string(6) "246780" } 

[1]=> array(34) { [0]=> array(28) { [0]=> string(4) "2160" [1]=> string(5) "63800" [2]=> string(6) "175820" [3]=> string(6) "234823" [4]=> string(6) "253080" [5]=> string(6) "256680" [6]=> string(6) "258760" [7]=> string(6) "258840" [8]=> string(6) "259560" [9]=> string(6) "258480" [10]=> string(6) "258550" [11]=> string(6) "258660" [12]=> string(6) "258480" [13]=> string(6) "258300" [14]=> string(6) "256140" [15]=> string(6) "257770" [16]=> string(6) "255960" [17]=> string(6) "255780" [18]=> string(6) "252520" [19]=> string(6) "253980" [20]=> string(6) "252540" [21]=> string(6) "250560" [22]=> string(6) "245700" [23]=> string(6) "253080" [24]=> string(6) "248580" [25]=> string(6) "248860" [26]=> string(6) "249660" [27]=> string(6) "246780" } [1]=> string(4) "2160" [2]=> string(5) "63800" [3]=> string(6) "175820" [4]=> string(6) "234823" [5]=> string(6) "253080" [6]=> string(6) "256680" [7]=> string(6) "258760" [8]=> string(6) "258840" [9]=> string(6) "259560" [10]=> string(6) "258480" [11]=> string(6) "258550" [12]=> string(6) "258660" [13]=> string(6) "258480" [14]=> string(6) "258300" [15]=> string(6) "256140" [16]=> string(6) "257770" [17]=> string(6) "255960" [18]=> string(6) "255780" [19]=> string(6) "252520" [20]=> string(6) "253980" [21]=> string(6) "252540" [22]=> string(6) "250560" [23]=> string(6) "245700" [24]=> string(6) "253080" [25]=> string(6) "248580" [26]=> string(6) "248860" [27]=> string(6) "249660" [28]=> string(6) "246780" [29]=> string(4) "2150" [30]=> string(5) "63800" [31]=> string(6) "175420" [32]=> string(6) "234843" [33]=> string(6) "253080" } [2]=> string(4) "2160" [3]=> string(5) "63800" [4]=> string(6) "175820" [5]=> string(6) "234823" [6]=> string(6) "253080" [7]=> string(6) "256680" [8]=> string(6) "258760" [9]=> string(6) "258840" [10]=> string(6) "259560" [11]=> string(6) "258480" [12]=> string(6) "258550" [13]=> string(6) "258660" [14]=> string(6) "258480" [15]=> string(6) "258300" [16]=> string(6) "256140" [17]=> string(6) "257770" [18]=> string(6) "255960" [19]=> string(6) "255780" [20]=> string(6) "252520" [21]=> string(6) "253980" [22]=> string(6) "252540" [23]=> string(6) "250560" [24]=> string(6) "245700" [25]=> string(6) "253080" [26]=> string(6) "248580" [27]=> string(6) "248860" [28]=> string(6) "249660" [29]=> string(6) "246780" [30]=> string(4) "2150" [31]=> string(5) "63800" [32]=> string(6) "175420" [33]=> string(6) "234843" [34]=> string(6) "253080" [35]=> string(4) "2110" [36]=> string(5) "63800" [37]=> string(6) "175820" [38]=> string(6) "234823" [39]=> string(6) "252180" [40]=> string(6) "256680" } }
$flock
等于分配给数组的变量。
$numFlocks
等于1,2,3的数组

<table>
 {section name=stand loop=$numFlocks}       

    <tr>
       {foreach from=$numFlocks item=columns}
          <td>{$flock[stand].$columns}</td>
       {/foreach}
   </tr>
 {/section}

</table>
但是,我的智能表仍然存在问题:

 <tr>
  {foreach from=$numFlocks item=columns}
    {section loop=$flock name=unit}
        <td>{$flock[unit].$columns}</td>
    {/section}
  {/foreach}
 </tr>

{foreach from=$numblocks item=columns}
{section loop=$flock name=unit}
{$flock[unit].$columns}
{/section}
{/foreach}
上面的尝试只给出了一行10列。第一列为空,然后是每个内部数组的前三个条目,但随后停止

{$flock[stand].$columns}
乍一看,
$columns
变量使用错误。
您将其用作字段名,但
$columns
包含的值也可以是数组,不一定与实际字段名对应。

SMART/HTML

<th>Blank</th>
  {foreach from=$numFlocks item=foo}
<th>Flock {$foo}</th>
  {/foreach}
</tr>

{section loop=$flock[1] name=unit}
  <tr {if $smarty.section.unit.first}style="display:none"{/if}>
{foreach from=$flock item=foo}
    <td>{$foo[unit]}</td>
{/foreach}
  </tr>
{/section}
空白
{foreach from=$numFlocks item=foo}
羊群{$foo}
{/foreach}
{section loop=$flock[1]name=unit}
{foreach from=$flock item=foo}
{$foo[单位]}
{/foreach}
{/section}
PHP代码

for ($x = 1; $x <= $numFlocksTot; $x++) {

 $Q = "SELECT Amount_eggs FROM farm_weekly WHERE Flock_id = '" . $x . "' AND Client_id = '" . $_SESSION["id"] . "'";

 $result1 = mysql_query($Q, $connection) or die("Query failed : " . mysql_error()); 

while ($line1 = mysql_fetch_assoc($result1))
{
    $val = $line1["Amount_eggs"];
    array_push($flock, $val); 
}

array_push($result, $flock); 
unset($flock);
$flock[] = array();
} 

用于($x=1;$x您的数组在编辑后看起来很奇怪是的,谢谢。我添加了创建数组的PHP代码以提供更多细节。如果改用
var\u export
,数组将更易于调试。还有几件事需要注意。在循环中运行查询是一种不好的做法,最好是一次查询所有内容ySQL Original已被弃用,您不妨使用MySQLi或PDO。@PaulRedmond我已将导出的数据添加到问题中。。有任何进一步的评论或建议吗?为了达到我的目的,数组看起来还好吗?数组本身就是这样。我不知道数据的背景,它代表什么,什么是(可能的)背后的逻辑。我可以为这个数据集提供一个示例,但这可能对您没有帮助。上面的数据描述了不同的年份,在这种情况下是三年。一年中的每个值都等于每周的单位。基本上,我想显示一个表,其中列是年,行是周,所有单元格都显示该周的单位。周s都在同一周开始,但可能不会在同一周结束。因此,某些列的行数可能比其他列多。
{$flock[stand].$columns}
<th>Blank</th>
  {foreach from=$numFlocks item=foo}
<th>Flock {$foo}</th>
  {/foreach}
</tr>

{section loop=$flock[1] name=unit}
  <tr {if $smarty.section.unit.first}style="display:none"{/if}>
{foreach from=$flock item=foo}
    <td>{$foo[unit]}</td>
{/foreach}
  </tr>
{/section}
for ($x = 1; $x <= $numFlocksTot; $x++) {

 $Q = "SELECT Amount_eggs FROM farm_weekly WHERE Flock_id = '" . $x . "' AND Client_id = '" . $_SESSION["id"] . "'";

 $result1 = mysql_query($Q, $connection) or die("Query failed : " . mysql_error()); 

while ($line1 = mysql_fetch_assoc($result1))
{
    $val = $line1["Amount_eggs"];
    array_push($flock, $val); 
}

array_push($result, $flock); 
unset($flock);
$flock[] = array();
}