2012-10-01 123 views
0

的變量循環我試圖創建一個PHP函數,它將回顯數據庫中的信息。我的名字看起來像香蕉[1],香蕉[2],蘋果[1],蘋果[2],蘋果[3]等等。通過包含[]

功能將選擇水果

function fruits($fruit){ 

} 

,然後該函數我會內部,從水果循環。

我如何迴應這些?

echo $fruit[$i]; 

顯然不起作用。

很基本,但我搞不明白。連鎖會殺死我。

function ponctuation($section,$sect){ 

switch($section){ 
    case 'apple': 
     $i=1; 
    break; 
    case 'banana': 
     $i=13; 
    break; 
} 

global $mysql_tablename; 
global $FName; 
global $Lname; 

if(isset($mysql_tablename)){ 
$result = mysql_query("SELECT * FROM $mysql_tablename WHERE FName='$FName' AND Lname='$Lname'"); 
    $row = mysql_fetch_array($result); 

echo '<form method="post" action="ponctuation.php?'.${$section.$sect}.'_valider">'; 
echo '<ul>'; 
$query = mysql_query("SELECT * FROM `ponct_enonces` WHERE `section`='$section' AND `sect`='$sect'"); 
while($row_q = mysql_fetch_assoc($query)) { 
    if($row_q['enon']==0 && $row_q['senon']==0){ 
     echo '<h2>'.$row_q['enonce'].'</h2>'; 
    } 
    if($row_q['enon']==1){ 
      echo '<h3>'.$row_q['enonce'].'</h3>'; 
      echo '<textarea rows="3" cols="100" name="'.$i.'" wrap="physical">' . $row[$section[$i]] . '</textarea>'; 
    } 
    if($row_q['senon']==1){ 
      echo '<h4>'.$row_q['enonce'].'</h4>'; 
      echo '<textarea rows="3" cols="100" name="'.$i.'" wrap="physical">' . $row[$section]. '</textarea>'; 
    } 
    $i++; 
    } 
echo '</ol>'; 
echo '<input type="submit" name="submit" value="Valider"/>'; 
echo '</form>'; 
} 

}

的代碼是有點難看,一些經銷商也有法國人的名字,其他有英文名字。

+0

echo $ fruit [$ i]'有什麼問題? – Vulcan

+0

不要有足夠的信息來幫助你。也許發佈代碼片段,你說你正在循環水果數組可能會有所幫助。 –

+0

您的意思是'$ row ['banana [1]'] = blabla ...','$ row ['banana [2]'] = blabla..'?如果是這樣,只要執行'foreach($ row as $ fruit)echo $ fruit;' – Marcus

回答

0

col名稱不會擴展爲PHP數組結構,例如如果你想重複這些

SELECT fruit[1], fruit[2], ...., fruit[100] 

會給你的

$row = array(
    'fruit[1]' => someval, 
    'fruit[2]' => someval, 
    ... 
); 

相當於,你必須變得醜陋:

$fruit = array(); 
for ($i = 0; $i <= 100; $i++) { 
    $fruit[$i] = $row['fruit[' . $i . ']']; 
} 

這引出的問題...爲什麼?這是一個可怕的數據結構要使用。正確地將它歸一化爲「水果屬性」子表將爲您節省這個麻煩,並且還允許您擁有屬性,而不是固定的1..100範圍或任何它具有的屬性。

+0

因此,如果我不想變醜,應該怎麼稱呼我的cols? – Sarah

+0

對它做一些[規範化](http://en.wikipedia.org/wiki/Database_normalization) –

+0

對不起...規範化?對PHP仍然很新穎。 – Sarah

0

如果你試圖循環遍歷行的所有列,您可以使用fetch_array

$result = $mysqli->query($query); 
$row = $result->fetch_array(); 

// loop over columns 
for ($i = 0, $count = count($row); $i < $count; $i++) 
    echo $row[$i]; 

這樣的話,你就不必擔心列名。不過,我可能會誤解你的問題。

+0

爲什麼每次迭代都調用count()? – Zaffy

+0

@Zaffy - 公平地說,五列的行不會是一個巨大的性能影響(除非獲取很多行,這是)。但是你是對的,我應該(並確實)優化它。 – jeff