【问题标题】:Fetch Value in reverse order using while loop使用while循环以相反的顺序获取值
【发布时间】:2012-09-05 22:05:48
【问题描述】:

我有一个从数据库中检索值的代码。但我想以相反的顺序获取这些值。参见这个例子

While($row=mysql_fetch_assoc($rs)){


 echo $row['id']."<br>";//gives 1 and 2 and so on 
   echo $row['val']."<br>";// gives abc and def and so on

}

但我想要

  2
    def
    1
   abc

我怎么能这样做。我不想像使用 ORDER BY 一样使用查询。所以我可以在 PHP 端控制它吗??

【问题讨论】:

  • 如果顺序对您很重要,那么您可能需要考虑使用order by,因为 mysql 不保证每次查询运行时都会以相同的顺序返回行。

标签: php while-loop fetch


【解决方案1】:
while($row = mysql_fetch_array($rs)){
    $data[] = $row;
}

$data = array_reverse($data,true);

while($data){
}

还没有测试过

我在this site 中对其进行了测试,它可以工作。这是我使用的 sn-p:

$data = array(1 => array("foo" => "bar"), 2 => true);
$data = array_reverse($data,true);
print_r($data);

编辑: 使用您编辑的答案,我得到了这个: $data = array(1 => array(1, "abc"), 2 => array(2, "def"));

$data = array_reverse($data,true);
foreach($data as $d){
    echo "id>".$d[0]." | val>".$d[1]."<br />";
}

【讨论】:

  • 这只会反向返回特定行中的元素——而不是像$array(id=&gt;4, Name=&gt;Fluffeh)这样的数组,你会得到$array(Name=&gt;Fluffeh, id=&gt;4)
  • 你说得对,我没有想到,只是把它扔给答案......我的主要观点是array_reverse方法
  • 这是正确的,但您应该编辑您的答案以表明 OP 应首先将查询结果存储在数组中,然后在他们从数据库中获取数据后将其反转。
  • 我使用了你的答案,因为我的浏览器进入了无限状态,你能不能再次查看我更新的问题并给我一个准确的答案。
  • 完整结果?请发布代码和输出以及它应该输出的内容
【解决方案2】:

将您的数据存储在一个数组中(在您的 while 循环中)。之后,您可以使用array_reverse 反转项目顺序。

【讨论】:

  • 感谢您的回答,但我如何使用 array_reverse ,我尝试使用像silentw 旧答案。
  • @HarshalMahajan 检查我的答案
【解决方案3】:

您还可以使用一个游标来遍历您的结果集 - 前后移动 - 使用类似 PDO 的东西 - 并且对于其他类型的连接可能会有类似的变化:

光标方向

对于表示可滚动游标的 PDOStatement 对象,此值确定将返回给调用者的行。该值必须是 PDO::FETCH_ORI_* 常量之一,默认为 PDO::FETCH_ORI_NEXT。要为您的 PDOStatement 对象请求可滚动游标,您必须在使用 PDO::prepare() 准备 SQL 语句时将 PDO::ATTR_CURSOR 属性设置为 PDO::CURSOR_SCROLL。

但使用 array_reverse 可能更简单。话虽如此,在查询中对数据进行排序会再次变得更简单(而且可能效率更高)。

【讨论】:

  • 感谢 Fluffeh 的回答,但我对 PDO 了解不多。
  • @HarshalMahajan 这是mysql_* 函数的更新、更闪亮和更安全 版本 - 目前已被弃用:)
  • 好的,我一定会学这个的。因为我在这里看到很多高级成员建议使用 PDO。
【解决方案4】:
$result = $mysqli->query($query);

for($i = $result->num_rows - 1; $i>0; $i--){
    $result->field_seek($i);
    $finfo = $result->fetch_field();
    echo $finfo->id;
    echo $finfo->val;
}

【讨论】:

  • 感谢回答,但我没有使用 mysqli ..:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2021-12-30
  • 1970-01-01
  • 2016-07-06
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多