2013-11-27 120 views
0

我從數據庫中獲取數據,並將其排序到數組中。從查詢(其被顯示在正確的順序)在不改變排序順序的情況下對數組進行排序

數據:

id task_id note date_created user_name document_name document_type 
238 131  3g  1385563455  Admin  doc3    jpg 
238 131  3g  1385563455  Admin  doc2    png 
238 131  3g  1385563455  Admin  doc1    png 
240 131  sd  1385563536  Admin  NULL    NULL 
241 131  sd  1385563565  Admin  NULL    NULL 
242 131  qw  1385563612  Admin  NULL    NULL 

然後我獲取數據並將其存儲在一個陣列:

$all_notes = array(); 
foreach($notes as $note) { 
    $all_notes[$note["id"]]["text"] = $note["note"]; 
    $all_notes[$note["id"]]["user_name"] = $note["user_name"]; 
    $all_notes[$note["id"]]["date"] = $note["date_created"]; 
    $all_notes[$note["id"]]["task_id"] = $_POST['task_id']; 
    $all_notes[$note["id"]]["docs"]["document_name"][] = $note["document_name"]; 
    $all_notes[$note["id"]]["docs"]["document_type"][] = $note["document_type"]; 
} 

當我呼應$ all_notes數組,排序順序現在完全相反。而不是第一行數據是id 238,現在是242.即使當我改變查詢以相反的方式排序時,數組仍然將數據從238排序到242(而不是242到238,這就是它應該)。

您的幫助將不勝感激!

回答

1

你在你的代碼做的是從DB值分配陣列 的$ id元素,相信這會得到自動填充增量。

all_notes [239] = value1; all_notes [238] = value2; etc ...

但是,如果你print_r(all_notes),你會得到238,239,...等等,這是正常的,因爲默認情況下PHP數組 以增量順序填充;

嘗試這樣的:

$i=0; 

$all_notes = array(); 

foreach($notes as $note) { 

    $all_notes[$i]["id"] = $note["id"]; 
    $all_notes[$i]["text"] = $note["note"]; 
    $all_notes[$i]["user_name"] = $note["user_name"]; 
    $all_notes[$i]["date"] = $note["date_created"]; 
    $all_notes[$i]["task_id"] = $_POST['task_id']; 
    $all_notes[$i]["docs"]["document_name"][] = $note["document_name"]; 
    $all_notes[$i]["docs"]["document_type"][] = $note["document_type"]; 

    $i++; 
} 

現在你的陣列是從數據庫查詢得到的順序填充。

1

請參閱array_flip()函數。這將允許您翻轉數組的順序。

http://us1.php.net/array_flip 

的原因是,如果你真的想,242個值是進入該數組第一個 - 它的第一個值脫落$notes陣列。

Orrr ...嘗試將ORDER BY DESC添加到SQL查詢的末尾。你沒有指定你以前如何嘗試改變排序,順便說一句。

大流士

+0

在查詢中,我是否添加「ORDER BY notes.date_created DESC」或「ORDER BY notes.date_created ASC」,數組將始終以相反的順序輸出。 – steeped

+0

如果您真的想要結果翻轉......爲什麼不按ID編號?您可以按照您知道的多個列進行排序 - 您可以先按ID排序,然後按date_created排序。 – Darius

+0

同樣的問題。這是我的查詢:「SELECT notes。*,users.name as'user_name',documents.name as'document_name',documents.ext as'document_type' FROM users,notes LEFT JOIN documents on notes.id = documents.note_id WHERE task_id =?AND notes.assigned_user_id = users.id ORDER BY id ASC「 – steeped

相關問題