循环遍历包含[]的变量

时间:2012-10-01 04:08:20

标签: php concatenation

我正在尝试创建一个PHP函数,它将回显来自db的信息。我的名字看起来像香蕉[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>';
}

}

代码有点难看,有些vars有法语名字,有些有英文名字。

2 个答案:

答案 0 :(得分: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 . ']'];
}

这引出了......为什么这样的问题?这是一个可怕的数据结构。将其正确地标准化为“水果属性”子表可以省去这个麻烦,并且还允许您拥有n属性,而不是固定的1..100范围或者您拥有的任何属性。

答案 1 :(得分: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];

这样,您就不必担心列名。不过,我可能会误解你的问题。