2013-03-26 22 views
0

我的SQL表包含的ID,书名,类型和ratings.Currently从我的SQL表我的阵列看起来像这样(输出)在PHP排序Arrayss

Array ( 
    [book] => Array ( 
     [0] => Array 
       ([0] => 1 
       [1] => book one 
       [2] => Fantasy/Horror 
       [4] => 8.9) 
     [1] => Array ( 
       [0] => 2 
       [1] => book two 
       [2] => Comedy 
       [4] => 8.3))) 

我想在此排序数组DESC ID 也在未来的标题。 数组变量是$book所以我写ksort($book)也试过arsort 由于某种原因,它不工作?是因为阵列吗?谢谢!

+16

为什么不指定SQL查询的order子句?这将比在PHP中排序更快。它也将允许多栏排序 – chrisbulmer 2013-03-26 20:19:52

+0

哦,我没有想到这一点!我现在就试试吧!但它仍然可以工作,甚至认为它是一个数组>> – shell 2013-03-26 20:22:35

+1

@shell它会出现在你的数组中它是如何从你的查询中得到输出的。 – Kermit 2013-03-26 20:24:50

回答

1

,如果你能到: 使用SQL排序,因为速度和灵活性(使用DB-发动机,其中它的appropiate)代替,如果你只使用阵列功能真的需要! :-) 这样做:

SELECT ID,Book name,Genre, ratings ORDER BY ID DESC 

OR

如果你仍然必须使用数组排序,在PHP中使用usort():

<?php 
//Book array 
$bookArray['book'][0] = array(2, 'book one', 'Fantasy/Horror', 8.9); 
$bookArray['book'][1] = array(1, 'book two ', 'Comedy', 8.3); 

function sortByIndex($a, $b) { 
    return $a[0] - $b[0]; 
} 

usort($bookArray['book'], 'sortByIndex'); 


echo 'RESULT=' . print_r($bookArray,true); 

?> 

结果在这个输出中: RESULT = Array([book] => Array([0] => Array([0] => 1 [1] => book two [2] => Comedy [3] => 8.3) [1] => Array([0] => 2 [1] => book one [2] => Fantasy/Horror [3] => 8.9)))

第二本书第一次来到这里,例如,我将第一个索引设置为1,值为'book two'。

1

最简单的方法是这样在最后添加到您的SQL语句:

ORDER BY id DESC 

此外,如果你真的想知道如何做到这一点在PHP中,你会做这种方式:

function cmp($a, $b) 
{ 
    if ($a[0] == $b[0]) { 
     return 0; 
    } 
    return ($a[0] > $b[0]) ? -1 : 1; 
} 

usort($array['book'], "cmp"); 
+0

当你在你的sql查询中执行ORDER BY时,你不需要使用我写的函数 – chrislondon 2013-03-26 20:51:21

0

只需要更改您的选择语句即可。它应该是这样的 -

select id,bookname,genre,ratings from yourtable ORDER BY id DESC,bookname;