【问题标题】:replace while loop with foreach用 foreach 替换 while 循环
【发布时间】:2015-01-21 12:00:15
【问题描述】:

我有一个这样的 php 代码:

$categories_query = tep_db_query("select categories_id, categories_name from categories order by categories_name");
while ($categories = mysql_fetch_array($categories_query)) {
$categories_array[] = array('id' => $categories['categories_id'], 'text' => $categories['categories_name']);
}

问题是如何用例如 foreach 替换 while 循环,以便我可以先获取 mysql 数组,然后我想编辑一些值,然后将其传递给循环?我尝试了不同版本的循环,但它们给我的结果与 while 循环不同。

【问题讨论】:

  • while 有什么问题吗?
  • 不要再使用 [mysql] 函数了。它们已被弃用,继续使用 mysqli 或 pdo
  • tep_db_query 让我觉得这是 oscommerce,怀疑他能轻易改变

标签: php for-loop foreach while-loop


【解决方案1】:

PHP 没有 mysql_fetch 函数可以一次传递所有行,这可以用于 foreach 外观。

尝试在一个循环中获取所有行并构建一个包含所有行的数组。然后,遍历该数组并按照您的描述执行操作。

【讨论】:

  • 好吧,将结果行放入数组中就是他现在所做的。
  • 好的,但是应该有第二个循环来执行所需的操作。
  • 这解释了我为什么到目前为止都失败了
【解决方案2】:

你尝试过的看起来不错。旧的和已弃用的 mysql 库中没有“获取所有”功能。您应该改用mysqliPDO
例如,在PDO 中,您可以使用$statement->fetchAll() 获取所有结果数据。

如果您仍然想用旧的mysql 库解决您的问题,那么:

$categories_query = tep_db_query("select categories_id, categories_name from categories order by categories_name");
while ($categories = mysql_fetch_array($categories_query)) 
{
    $categories_array[] = array('id' => $categories['categories_id'], 'text' =>     $categories['categories_name']);
}

// do something with your $categories_array here

foreach($categories_array AS $array => $row)
{
    // you can output / access each row here e.g. with: $row['id']
    // or you can do a second foreach-loop for the columns:
    foreach($row AS $col => $data)
    {
        echo $data;
    }
}

【讨论】:

  • 在第一个 foreach 循环中,我只输入了“categories_array2[] = $row;”所以最终结果与while循环完全相同,但现在我可以在执行for循环之前执行我的操作,谢谢!
【解决方案3】:

从外观上看,循环的目的只是重命名一些表列。

只要做:

<?php
  $categories_array = mysqli_query( mysqli_fetch_assoc($con,"SELECT categories_id AS id, categories_name AS text FROM categories ORDER BY categories_name") );
?>

【讨论】:

  • 我的问题有点复杂。这是代码之前的样子,但问题是整个代码都在另一个循环中。所以我试图摆脱循环中的数据库查询并用数组替换它以使其更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2018-08-20
  • 2014-12-11
  • 2013-07-08
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多