2014-11-23 115 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