2014-11-23 112 views
0

我有一个PHP代码:更换while循环用foreach

$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这样我就可以先取mysql的阵列更换while循环,然后我想编辑一些值,然后将其传递给循环?我尝试了不同版本的循环,但它们并没有给出和while循环一样的结果。

+0

任何问题'while'? – zerkms 2014-11-23 20:05:29

+1

不要再使用[mysql]函数。他们已被弃用,转移到mysqli或pdo – DarkBee 2014-11-23 20:09:49

+0

tep_db_query让我觉得这是oscommerce,怀疑他可以很容易地改变 – rjdown 2014-11-23 20:25:22

回答

0

你已经尝试看起来不错。旧的和不推荐的mysql库中没有“获取全部”功能。您应改用mysqliPDO
in 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; 
    } 
} 
+0

在第一个foreach循环中,我只是把“categories_array2 [] = $ row;”所以最终的结果与while循环完全一样,但是现在我可以在执行for循环之前执行我的操作,谢谢! – kalle 2014-11-23 23:45:52

1

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

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

+0

,将结果行放入数组就是他现在所做的。 – 2014-11-23 20:04:49

+0

好的,但应该有第二个循环来执行所需的操作。 – WeSee 2014-11-23 20:06:56

+0

非常感谢,解释了为什么我到目前为止失败 – kalle 2014-11-23 23:43:28

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")); 
?> 
+0

我的问题有点复杂。这是代码看起来像以前的样子,但问题是这整个代码是在另一个循环内。所以即时通讯试图摆脱循环中的数据库查询,并将其替换为一个数组,以使其更快。 – kalle 2014-11-23 22:29:37