2013-11-27 130 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

相关问题