通过MySQL查询返回的PHP中的数组进行循环

通过MySQL查询返回的PHP中的数组进行循环,php,mysql,arrays,loops,string-formatting,Php,Mysql,Arrays,Loops,String Formatting,我有一个应用程序的一部分,它以数组的形式循环返回MySQL查询。但是,我需要在返回的某些项目上放置几个不同的格式设置,例如,一列需要日本货币,另一列需要美国货币,其中一个返回的项目是指向图像的链接 我将使用列的名称,但是,我用来完成此操作的相同函数将用于许多不同的表 这就是到目前为止我对循环的看法 while($row = mysql_fetch_array($result)) { for($i=0;$i<=count($row);$i++) { if($row

我有一个应用程序的一部分,它以数组的形式循环返回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>";
    }
}

我会针对每个表标记这些结果,但如果您希望它最终具有灵活性,请尝试下面这段难闻的代码

// 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>';
    }
}

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

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

// 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>';
    }
}
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)) {
    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>";
}
话虽如此,使用相同的函数来处理来自所有可能表的所有结果将很快变得难以管理。您应该定制此选项以适合以下情况:

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

在我成为一个框架狂热者之前,我曾经有过一些不同的方法。我的数据库库有一组方法,这些方法返回了一组记录集。通过这种方式,我将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*/
}

在我成为一个框架狂热者之前,我曾经有过一些不同的方法。我的数据库库有一组方法,这些方法返回了一组记录集。通过这种方式,我将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*/
}
使用下面的代码。您可以根据需要修改它

谢谢使用下面的代码。您可以根据需要修改它


谢谢

您缺少一个结束括号。3个开放括号?2个括号?那我一定是弄错了,A!我的坏头儿。让我们尽快解决这个问题。你缺少一个结束括号。3个开放括号?2个括号?那我一定是弄错了,A!我的坏头儿。让我们尽快解决这个问题。@Phil?@Phil当然可以,但是$row[foo]是官方认可的一级索引快捷方式。总的来说,这根本不应该用字符串插值来完成,而应该用PHP来实现,但这不是这个答案的重点。第二个块做什么?@Christopher它只输出行中的列。第一个输出foo列,第二个输出bar列。用列名替换foo和bar。每个表中有一组不同的列,其中一些名称不匹配。不过一切都正常,你是个救命恩人。向上投票+答案归你@deceze@Phil?@Phil当然可以,但是$row[foo]是官方认可的一级索引快捷方式。总的来说,这根本不应该用字符串插值来完成,而应该用PHP来实现,但这不是这个答案的重点。第二个块做什么?@Christopher它只输出行中的列。第一个输出foo列,第二个输出bar列。用列名替换foo和bar。每个表中有一组不同的列,其中一些名称不匹配。不过一切都正常,你是个救命恩人。投票表决+答案由你@deceze决定。