2014-02-20 37 views
0

我想不通为什么asort不工作。其他任何排序都不起作用。 $ hs ['hs_type']是来自MySQL查询的值。如何按值保存键的数组进行排序?

$results = $query->result_array(); 
$hs_types = array(); 
foreach($results as $hs) { 
    $hs_types[$hs['hs_type']]++; 
} 

$projects = array(); 
foreach($hs_types as $hs) { 
    array_push($projects, $hs); 
} 
asort($projects); 

的var_dump我前阵排序:数组(大小= 15)

* 8 => int 1709 
    * 13 => int 26 
    * 7 => int 474 
    * 14 => int 800 
    * 11 => int 282 
    * 6 => int 61 
    * 5 => int 23 
    * 15 => int 181 
    * 3 => int 2 
    * 19 => int 3 
    * 9 => int 50 
    * 1 => int 44 
    * 2 => int 2 
    * 4 => int 4 
    * 18 => int 13 

的var_dump我阵列后排序:数组(大小= 15)

* 8 => int 2 
    * 12 => int 2 
    * 9 => int 3 
    * 13 => int 4 
    * 14 => int 13 
    * 6 => int 23 
    * 1 => int 26 
    * 11 => int 44 
    * 10 => int 50 
    * 5 => int 61 
    * 7 => int 181 
    * 4 => int 282 
    * 2 => int 474 
    * 3 => int 800 
    * 0 => int 1709 

我想要的:

* 3 => int 2 
    * 2 => int 2 
    * 19 => int 3 
    * 4 => int 4 
    * 18 => int 13 
    * 5 => int 23 
    * 13 => int 26 
    * 1 => int 44 
    * 9 => int 50 
    * 15 => int 181 
    * 11 => int 282 
    * 7 => int 474 
    * 14 => int 800 
    * 8 => int 1709 
+1

请显示您的排序代码。 – deceze

回答

1

问题是,你得到的一切为您很好的键阵列,然后推每个项目在$项目阵列(丢失密钥),然后在$ projects数组上进行分配。

它表明了这个小测试脚本: -

<?php 

$hs_types = array(8 => 1709, 
    13 => 26, 
    7 => 474, 
    14 => 800, 
    11 => 282, 
    6 => 61, 
    5 => 23, 
    15 => 181, 
    3 => 2, 
    19 => 3, 
    9 => 50, 
    1 => 44, 
    2 => 2, 
    4 => 4, 
    18 => 13); 

Echo "\r\nOriginal array\r\n"; 
print_r($hs_types); 

$projects = array(); 
foreach($hs_types as $hs) 
{ 
    array_push($projects, $hs); 
} 

asort($projects); 

Echo "\r\nPushed array sorted\r\n"; 
print_r($projects); 

asort($hs_types); 

Echo "\r\nOriginal array sorted\r\n"; 
print_r($hs_types); 

?> 

,但它看起来像它会更容易刚刚得到的排序列表中的SQL摆在首位。

0

我试着用你的arra y随ASORT()和它的工作完美,回来跟您预期的结果:

<?php 
//your array 
$a = array(
    8 => 1709, 
    13 => 26, 
    7 => 474, 
    14 => 800, 
    11 => 282, 
    6 => 61, 
    5 => 23, 
    15 => 181, 
    3 => 2, 
    19 => 3, 
    9 => 50, 
    1 => 44, 
    2 => 2, 
    4 => 4, 
    18 => 13 
); 

//print unsorted array 
print_r($a); 

//sort the array 
asort($a); 

//print the sorted array 
echo "<br/><br/>"; 
print_r($a); 

如果这真的不是为你工作,为什么不这样做在SQL查询,而不是排序?那么你不需要费心去重新排序在PHP中。

0

您确定您使用的是asort而不是sort?我想你的代码,它完美的作品:

<?php 

$myArray = array(
    8 => 1709, 
    13 => 26, 
    7 => 474, 
    14 => 800, 
    11 => 282, 
    6 => 61, 
    5 => 23, 
    15 => 181, 
    3 => 2, 
    19 => 3, 
    9 => 50, 
    1 => 44, 
    2 => 2, 
    4 => 4, 
    18 => 13, 
); 

var_dump($myArray); 

asort($myArray); 
var_dump($myArray); 
?> 

我的结果:

enter image description here