【问题标题】:How do I code a loop for my echo statement?如何为我的 echo 语句编写一个循环?
【发布时间】:2010-03-26 14:39:53
【问题描述】:

我在页面底部的 foreach 回显循环中只得到一个打印结果。

<?php
    defined('_JEXEC') or die('Restricted access');
    $db =& JFactory::getDBO();

    $query0 = "SELECT * FROM  `jos_ginfo` WHERE . . . LIMIT 30";

    //echo $query0;
    $db->setQuery($query0);
    $ginfo = $db->loadObjectList();
    //echo
    //$ginfo[0];
    foreach($ginfo as $ginfo[$i]):
    {$i=0; $i++;} 
     endforeach;
    echo $db->getErrorMsg();

    if(empty($ginfo)){
    echo "<center>No
    game found, try a different entry.</center>";
    }else{


    $pgndata = array ( $ginfo[$i]->Id);

        $i=0;
    foreach($pgndata as $ginfo[$i]->Id):
    //I am only getting one printed result!
    {
        echo "<a href='/index.php?option=com_publishpgn&tactical-game=".$ginfo[$i]->Id."&Itemid=78.html'>\n";
    echo "".$ginfo[$i]->White." v. ".$ginfo[$i]->Black."  (".$ginfo[$i]->Result.") ".$ginfo[$i]->EventDate." ECO:".$ginfo[$i]->ECO."</a><br>\n";

    $i++;
    }

     endforeach;

    //echo "</div>";
        }
    ?>

【问题讨论】:

    标签: php mysql arrays loops foreach


    【解决方案1】:

    您的代码中有一些错误:

    foreach($ginfo as $ginfo[$i]):
        {$i=0; $i++;} 
    

    在第一次迭代中,$i 未定义,因此从 $ginfo 中提取的 foreach 循环的第一个值将存储在 $ginfo[null] 中。然后将$i 设置为0,递增并循环,所以现在下一个值将存储在$ginfo[1] 中,所有进一步的迭代也将如此。因此,您最终只能从 $ginfo 对象中提取两个值,并存储在“null”和“1”键中。

    稍后,你会这样做

    $pgndata = array ( $ginfo[$i]->Id);
    

    您不是在循环中执行此操作,因此$pgndata 变成了一个数组,其中一个元素取自$ginfo[1]-&gt;Id。然后你立即做

    foreach($pgndata as $ginfo[$i]->Id):
    

    但是$pgndata 里面只有一个元素,这就解释了为什么你只有一个项目输出。

    我不知道顶部的-&gt;loadObjectList() 是做什么用的。它是否返回一个数组?一个东西?如果它是任何数组,那么第一个 foreach 循环的意义何在?除了前两个值之外,您正在销毁其中的所有值。

    当您在 foreach 循环中循环遍历数组时,尝试修改数组从来都不是一个好主意。这有点像在以 100 英里/小时的速度在高速公路上行驶时尝试更换汽车的轮胎、车轴和变速箱。你可能会幸运一次,剩下的时间你会被涂成一层薄薄的番茄酱。

    另外,你为什么要混合 {}: / end 语法?选择其中一个,但不要同时使用。大括号是标准的并且是普遍理解的。 :/end 版本对大多数人来说远没有那么流行和陌生。

    【讨论】:

    • 感谢您提供的信息丰富的帖子,其中包含一些很棒的见解。
    【解决方案2】:

    我想,你需要这个:

    $ginfo = $db->loadObjectList();
    foreach($ginfo as $value)
    {
        echo $value . '<br />';
    }
    

    进一步,请参阅foreach manual and other loops.

    【讨论】:

    • 如何将你的 $value 与我的每一个回声关联起来?
    【解决方案3】:

    $query = mysql_query("select * from table");

    while ($result = mysql_fetch_array($query)) { 回声“$result[id]”; echo "$result[firstname]";

    }

    【讨论】:

      【解决方案4】:

      这是 Sarfraz 代码的修改版本。

      试试这个..

      // Array of multiple games
      $ginfo = $db->loadObjectList();
      
      // Loop through games array
      foreach ($ginfo as $index => $singleGameInfo)
      {
          foreach($singleGameInfo as $elementName => $elementValue)
          {
              echo "[$elementName \"$elementValue\"]\n";
          }
      }
      

      代替...

      echo "[Event \"".$ginfo[0]->Event."\"]\n";
      
      echo "[Site \"".$ginfo[0]->Site."\"]\n";
      
      echo "[Date \"".$ginfo[0]->Date."\"]\n";
      
      echo "[Round \"".$ginfo[0]->Round."\"]\n";
      
      echo "[White \"".$ginfo[0]->White."\"]\n";
      
      echo "[Black \"".$ginfo[0]->Black."\"]\n";
      
      echo "[Result \"".$ginfo[0]->Result."\"]\n";
      
      echo "[ECO \"".$ginfo[0]->ECO."\"]\n";
      
      echo "[WhiteElo \"".$ginfo[0]->WhiteElo."\"]\n";
      
      echo "[BlackElo \"".$ginfo[0]->BlackElo."\"]\n";
      
      echo "[Annotator \"".$ginfo[0]->Annotator."\"]\n";
      
      echo "[SetUp \"".$ginfo[0]->SetUp."\"]\n";
      

      编辑:您是在尝试循环播放多个游戏还是单个游戏的字段数据?

      Edit2:更新为循环播放游戏

      【讨论】:

      • 我正在尝试循环播放多个游戏。我可以毫无问题地玩一场游戏。
      • ggg,我更新了循环代码。它现在循环播放游戏,并显示每个游戏的每个字段。
      猜你喜欢
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      相关资源
      最近更新 更多