【问题标题】:Looping through a variable which contains []循环遍历包含 [] 的变量
【发布时间】:2012-10-01 04:08:19
【问题描述】:

我正在尝试创建一个 PHP 函数,该函数将从数据库中回显信息。我的 col 名称看起来像banana[1]、banana[2]、apple[1]、apple[2]、apple[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>';
}

}

代码有点难看,有些var是法语名,有些是英文名。

【问题讨论】:

  • echo $fruit[$i] 有什么问题?
  • 没有足够的信息来帮助您。也许在你说你循环水果数组的地方发布代码片段可能会有所帮助。
  • 您的意思是$row['banana[1]']=blabla...$row['banana[2]']=blabla..?如果是这样,只需 foreach($row as $fruit) echo $fruit;

标签: php concatenation


【解决方案1】:

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 范围或任何您拥有的范围。

【讨论】:

  • 那么如果我不想变得丑陋,我应该怎么称呼我的cols呢?
  • 在上面做一些normalization
  • 对不起...标准化?对 PHP 来说还是很新的。
  • 我应该叫他们apple1,apple2吗?这是我第一次做的,但后来我被告知称它们为 apple[1] 等等,这样会更容易处理。
  • 数据库概念。按照链接并做一些阅读。与php没有任何关系,除了您使用php与数据库对话。
【解决方案2】:

如果您尝试循环遍历一行中的所有列,您可以使用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];

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

【讨论】:

  • 为什么每次迭代都调用count()
  • @Zaffy - 好吧,公平地说,一行有五列不会对性能造成巨大影响(除非它获取很多行)。但你是对的,我应该(并且确实)优化它。
猜你喜欢
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2018-05-26
  • 2019-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多