2013-10-25 60 views
-1

我有一个包含'customer'和'Total'的数据数组。 (下面的例子)。它来自两个不同的数据库。PHP - 尝试按数字字段对数组进行排序

我需要一种基于Total字段对数组进行排序的方法,以便Largest Total位于顶部。但到目前为止,我尝试过的每件事都导致它假设5大于32 [5,32,25,16,11]

实现此目的的最简单方法是什么?我尝试将intval()添加到strcmp函数,但它没有区别?

$arrayName = array(); 

$arrayName[] = array ('customer' => 'Customer1', 'Total' => 25); 
$arrayName[] = array ('customer' => 'Customer2', 'Total' => 16); 
$arrayName[] = array ('customer' => 'Customer3', 'Total' => 32); 
$arrayName[] = array ('customer' => 'Customer4', 'Total' => 5); 
$arrayName[] = array ('customer' => 'Customer5', 'Total' => 11); 

print_r($arrayName); 
print "</br>"; 

//Sort the Arrray by Total 
function arrSort1($b, $a) 
{ 
    return strcmp($a['Total']), $b['Total']); 
}; 

usort($arrayName, "arrSort1"); 

print_r($arrayName); 
+1

“5” *是*大于 “32” 时相比,*较大的词法*。为什么'strcmp'为数字?! – deceze

+0

我从来没有想过这样,好点 – IGGt

回答

1

您正在通过字符串进行比较,但您确实想通过数值进行比较。尝试:

function arrSort1($b, $a) 
{ 
    if ($a['Total'] > $b['Total']) { 
     return 1; 
    } else if ($a['Total'] < $b['Total']) { 
     return -1; 
    } 
    return 0; 
} 

的排序后的数组看起来像这样:

Array 
(
    [0] => Array 
     (
      [customer] => Customer3 
      [Total] => 32 
     ) 

    [1] => Array 
     (
      [customer] => Customer1 
      [Total] => 25 
     ) 

    [2] => Array 
     (
      [customer] => Customer2 
      [Total] => 16 
     ) 

    [3] => Array 
     (
      [customer] => Customer5 
      [Total] => 11 
     ) 

    [4] => Array 
     (
      [customer] => Customer4 
      [Total] => 5 
     ) 

) 
+0

'>'→'-','$ cmp'需要返回一个'int'。 – deceze

+0

@deceze我不知道我跟着,返回一个是否大于另一个按'Total'降序排列数组。您可以通过将'>'更改为'<'来进行升序。 – Jasper

+0

根据第一个值小于,等于还是大于第二个,比较函数必须返回*“一个值'<0','0'或'> 0'”*“bool”不会执行完全一样的东西。 – deceze

相关问题