从MySQL Query返回通过PHP循环

时间:2011-08-12 02:55:22

标签: php mysql arrays loops string-formatting

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

4 个答案:

答案 0 :(得分:6)

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>";
}

答案 1 :(得分: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,您应该考虑另一种解决问题的方法。

答案 2 :(得分:0)

使用以下代码。您可以根据需要进行修改。

var dataBuffer = [UInt8](count: 280*140 * 4, repeatedValue: 0)

        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrder32Big.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue)

        let context = CGBitmapContextCreate(&dataBuffer, 280, 140, 8, 1120, colorSpace, bitmapInfo.rawValue)
        let imageRef = CGImageCreateWithImageInRect(CGImage, CGRectMake(0, 0, 280, 140))
        let rectMake = CGRectMake(0, 0, 280, 140)

        CGContextDrawImage(context, rectMake, imageRef)

由于

答案 3 :(得分:-2)

在我成为框架狂热者之前,我曾经有过不同的方法。我的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*/
}