2012-10-25 33 views
-2

可能重复:
Sorting an array based on its value如何通过其中的特定值对数组进行排序?

我想排序它里面的值的数组。我试过usort,但它导致了一些意想不到的结果,实际上改变了输出的值,而不是仅仅移动数组中的元素。

下面是我要排序的数组:

Array 
(
[element1] => Array 
    (
     [Total] => 1 
     [paTotal] => 0 
     [totalPreregistrations] => 7 
     [totalPreregistrationsToDate] => 26 
     [pas] => Array 
      (
       [0] => Array 
        (
         [id] => 119 
        ) 

      ) 

    ) 

[element2] => Array 
    (
     [Total] => 1 
     [paTotal] => 0 
     [totalPreregistrations] => 0 
     [totalPreregistrationsToDate] => 58 
     [pas] => Array 
      (
       [0] => Array 
        (
         [id] => 107 
        ) 

      ) 

    ) 
... element3, 4, etc... 

我想通过“totalPreregistrations”号,以便在element2上面去,如果部件1 element2的的totalPreregistrations数排序进入上述部件1的。

当然,我也希望保留子数组。

谢谢!

+3

请张贴代码为你尝试的解决方案。 –

+0

'尝试使用,但它会导致一些意想不到的结果。什么样的结果..你可以添加你的'usort'的实现..你也可以添加你的数组的序列化版本 – Baba

+0

我想我明白你的意思..... – Baba

回答

2

Documentation: uasort()

function mySort($a, $b) { 
    if($a['totalPreregistrations'] == $b['totalPreregistrations']) { 
    return 0; 
    } else if($a['totalPreregistrations'] > $b['totalPreregistrations']) { 
    return 1; 
    } else { 
    return -1; 
    } 
} 

uasort($array, 'mySort'); 
+0

Wouldn这不会破坏原始键名“element1”,“element2”等。 –

+0

也许吧。将它从'usort()'改为'uasort()'。 – Sammitch

+0

这工作!我必须将-1更改为1,将1更改为-1,以便反转。我使用usort而不是uasort,这是主要问题。谢谢! –

1

您可以使用uasort代替usort

uasort($array, function ($a, $b) { 
    $a = $a['totalPreregistrations']; 
    $b = $b['totalPreregistrations']; 
    return ($a == $b) ? 0 : (($a < $b) ? -1 : 1); 
}); 


echo "<pre>"; 
print_r($array); 

输出

Array 
(
    [element2] => Array <-------------------------- element key remains intact 
     (
      [Total] => 1 
      [paTotal] => 0 
      [totalPreregistrations] => 0 
      [totalPreregistrationsToDate] => 58 
      [pas] => Array 
       (
        [0] => Array 
         (
          [id] => 107 
         ) 

       ) 

     ) 

    [element1] => Array 
     (
      [Total] => 1 
      [paTotal] => 0 
      [totalPreregistrations] => 7 
      [totalPreregistrationsToDate] => 26 
      [pas] => Array 
       (
        [0] => Array 
         (
          [id] => 119 
         ) 

       ) 

     ) 

) 
+1

+1这和Sammitch的解决方案是一样的,但是双重三元是优雅的。 –

相关问题