我有一个应用程序的一部分,它以数组的形式循环遍历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>";
}
}
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>";
}
我将这些结果标记为特定于每个表,但如果您希望它最终灵活,请尝试这段臭代码
// 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>';
}
}
请注意,这是一个已知的反模式,您应该真正考虑另一种解决问题的方法。
使用下面的代码。
$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.
谢谢
在我成为一个框架狂热分子之前,我曾经有一个有点不同的方法。我的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*/
}