【问题标题】:Looping through Array in PHP returned from MySQL Query循环遍历从 MySQL Query 返回的 PHP 中的数组
【发布时间】:2011-10-25 11:53:16
【问题描述】:

我有一个应用程序的一部分,它以数组的形式循环返回 MySQL 查询(众所周知)。但是,我需要在某些返回的项目上放置几种不同的格式设置,例如,一列需要日本货币,另一列是美国货币,其中一个返回的项目是图像的链接。

我会使用列的名称,但是我用来完成此操作的同一函数将用于许多不同的表。

到目前为止,这就是我所拥有的循环。

while($row = mysql_fetch_array($result)) {      
    for($i=0;$i<=count($row);$i++) {
    if($row[i]==$row['Yen_Price']) {// I didn't expect this to work...but this is what I would like to do.
        echo "Hello";
    }
    echo "<td>" . $row[$i] . "</td>";
    }
}

【问题讨论】:

  • 您缺少右括号。
  • 3 个左括号? 2个右括号?那我一定是误会了..
  • 王牌!我的坏队长。让我们尽快解决这个问题。

标签: php mysql arrays loops string-formatting


【解决方案1】:
while ($row = mysql_fetch_assoc($result)) {
    foreach ($row as $key => $value) {
        if ($key == 'Yen_Price') {
            echo "Hello";
        }
        echo "<td>$value</td>";
    }
}

话虽如此,使用相同的函数来处理来自所有可能表的所有结果很快就会变得相当难以管理。您应该像这样定制它以适应这种场合:

while ($row = mysql_fetch_assoc($result)) {
    echo "<td>Foo: $row[foo]</td>";
    echo "<td>Bar: $row[bar]</td>";
}

【讨论】:

  • @Phil Why's that?
  • @Phil 当然,但"$row[foo]" 是官方认可的一级索引快捷方式。总的来说,这根本不应该通过字符串插值来完成,而是在 PHP 中中断,但这不是这个答案的重点。
  • 好的,这行得通,但是我只说第一块代码。第二个区块有什么作用?
  • @Christopher 它只是输出该行的列。 foo 列在第一个 &lt;td&gt; 中输出,bar 列在第二个中输出。用您的列名替换 foobar
  • 每个表都有一组不同的列,其中一些名称不匹配。一切正常,你是一个救生员,好先生。投票 + 答案交给你@deceze。
【解决方案2】:

我会针对每个表标记这些结果,但如果您希望它最终具有灵活性,请试试这个臭代码

// using mysql_fetch_assoc() as we don't need the numeric indices
while($row = mysql_fetch_assoc($result)) {
    foreach ($row as $col => $val) {
        echo '<td>';
        switch ($col) {
            case 'US_Price'  :
                printf('$%0.2f USD', $val);
                break;
            case 'Yen_Price' :
                printf('¥%0.2f', $val);
                break;
            case 'image'     :
                printf('<img src="%s">', htmlspecialchars($val));
                break;
        }
        echo '</td>';
    }
}

请注意,这是known antipattern,您真的应该考虑另一种解决问题的方法。

【讨论】:

    【解决方案3】:

    使用下面的代码。你可以随意修改。

    $select=" WRITE YOUR SELECT QUERY HERE ";
    $queryResult= mysql_query($select);
    
    //DECLARE YOUR ARRAY WHERE YOU WILL KEEP YOUR RECORD SETS
    $data_array=array();
    
    //STORE ALL THE RECORD SETS IN THAT ARRAY 
    while ($row = mysql_fetch_array($queryResult, MYSQL_ASSOC)) 
    {
        array_push($data_array,$row);
    }
    
    
    mysql_free_result($queryResult);
    
    
    //TEST TO SEE THE RESULT OF THE ARRAY 
    echo '<pre>';
    print_r($data_array);
    echo '</pre>';
    // YOU CAN USE HERE FOR EACH LOOP AS PER YOUR REQUIREMENTS. 
    

    谢谢

    【讨论】:

      【解决方案4】:

      在我成为一个框架狂热者之前,我曾经有一些不同的方法。我的 db 库有一组方法返回我的记录集数组。通过这种方式,我将我的数据库交互与我使用记录集的方式完全分开。完成此操作后,很容易设置一个网格模板,该模板可以查看数组然后采取相应措施。这是一些伪代码

      $recordSets = $db->returnRecordSets("select some, columns from tablename");//extra param if I need array to be  associative
      $recordSetsCount = count($recordSets);
      if($recordSetsCount == 0){ echo 'Nothing to be done!'; //exit or return or break here}
      for($i=0; $i< $recordSetsCount; $i++ == 0){
        $recordSet = $recordSets[$i];
        /*Inspect the $recordSet array and use it*/
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        • 2012-11-14
        • 2011-04-25
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多