对数组中的数据进行排序而不更改排序顺序

时间:2013-11-27 15:18:53

标签: php arrays sorting

我从数据库中获取数据,并在数组中对其进行排序。

查询中的数据(以正确的顺序显示):

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,这就是它应该是)。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

请参阅array_flip()函数。这将允许您翻转数组的顺序。

http://us1.php.net/array_flip

原因是,如果你真的认为,242值首先进入数组 - 它是第一个从$notes数组出来的值。

Orrr ...尝试将ORDER BY DESC添加到SQL查询的末尾。您没有指定之前尝试更改排序的方式,顺便说一句。

大流士

答案 1 :(得分:1)

您在代码中执行的操作是分配数组的$ id元素 使用db中的值,确保它会逐渐自动填充。

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

但是如果你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++;
}

现在,您的数组按照从DB查询中获得的顺序填充。