2010-03-26 43 views
0

我只在頁面底部的foreach回聲循環中得到一個打印結果。如何爲我的echo語句編寫一個循環?

<?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>"; 
     } 
    ?> 

回答

0

代碼中的幾個誤區:

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]->Id採取單一元素的數組。然後立即做

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

但它$pgndata只有一個元素,這也解釋了爲什麼你只有一個項目輸出。

我不知道你頂部的->loadObjectList()是什麼。它是否返回一個數組?一個東西?如果它是任何數組,第一個foreach循環有什麼意義?除了存在的前兩個值之外,你正在銷燬所有的東西。

當您在foreach循環中循環時嘗試修改數組永遠不會是一個好主意。這有點像嘗試在100英里每小時的高速公路上時改變輪胎和車軸以及車上的變速器。你可能會幸運一次,剩下的時間你會被傳播到一個薄番茄醬污漬。

此外,爲什麼混合{}:/end語法?選擇一個或另一個,但不要同時使用兩者。大括號是標準的和普遍理解的。對於大多數人來說:/最終版本遠不那麼流行和不熟悉。

+0

感謝您提供一些非常豐富的見解的信息。 – 2010-03-27 09:28:02

0

我想,你需要這樣的:

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

此外,看到foreach manual and other loops.

+0

如何將您的$ value與我的每個回聲相關聯? – 2010-03-26 14:57:12

0

這是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:通過遊戲更新循環

+0

我試圖通過多個遊戲循環。我得到一個沒有問題的遊戲。 – 2010-03-29 12:03:10

+0

ggg,我更新了循環代碼。它現在循環遊戲,並顯示每場比賽的每個領域。 – 2010-03-29 14:09:48

0

$查詢=請求mysql_query( 「SELECT * FROM table」);

while($ result = mysql_fetch_array($ query)) { echo「$ result [id]」; echo「$ result [firstname]」;

}