用foreach替换while循环

时间:2014-11-23 19:53:51

标签: php for-loop foreach while-loop

我有一个像这样的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循环相同的结果。

3 个答案:

答案 0 :(得分:1)

PHP没有mysql_fetch函数,可以一次性传递所有行,可以在foreach外观中使用。

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

答案 1 :(得分:0)

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

只是做:

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

答案 2 :(得分:0)

你所尝试的看起来不错。旧的和已弃用的mysql库中没有“fetch all”函数。您应该切换到mysqliPDOPDO中,您可以使用$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;
    }
}