按键值排序关联数组

时间:2014-08-14 10:09:09

标签: php arrays sorting

我尝试用DES中的“delais_livraison”在php中对我的数组进行排序,但我不知道我该怎么做

在第一个级别中,我预计会有第一个Etoile => 25,然后是Feuillage => 10

Array
(
    [A] => Array
        (
            [0] => Array
                (
                    [Feuillage] => Array
                        (
                            [delais_livraison] => 10
                        )
                )
            [1] => Array
                (
                    [Étoiles] => Array
                        (
                            [delais_livraison] => 25
                        )
                )
        )
    [B] => Array
        (
            [0] => Array
                (
                    [Grenouillère] => Array
                        (
                            [delais_livraison] => 7
                        )
                )
            [1] => Array
                (
                    [Chaussons] => Array
                        (
                            [delais_livraison] => 0
                        )
                )
        )
)

编辑: 这个我的数组是如何构建的 pastebin

3 个答案:

答案 0 :(得分:1)

试试:

$data = array(
    'A' => array(
        array('Feuillage'    => array('delais_livraison' => 10)),
        array('Étoiles'      => array('delais_livraison' => 25)),
    ),
    'B' => array(
        array('Grenouillère' => array('delais_livraison' => 7)),
        array('Chaussons'    => array('delais_livraison' => 0)),
    ),
);

foreach ($data as &$group) {
    usort($group, function($itemA, $itemB){
        $a = current($itemA)['delais_livraison'];
        $b = current($itemB)['delais_livraison'];
        if ($a == $b) return 0;
        return ($a > $b) ? -1 : 1;
    });
}

输出:

array (size=2)
  'A' => 
    array (size=2)
      0 => 
        array (size=1)
          'Étoiles' => 
            array (size=1)
              'delais_livraison' => int 25
      1 => 
        array (size=1)
          'Feuillage' => 
            array (size=1)
              'delais_livraison' => int 10
  'B' => &
    array (size=2)
      0 => 
        array (size=1)
          'Grenouillère' => 
            array (size=1)
              'delais_livraison' => int 7
      1 => 
        array (size=1)
          'Chaussons' => 
            array (size=1)
              'delais_livraison' => int 0

解决方案使用PHP 5.3.0中引入的anonymous function。对于旧版本,只需创建一个函数并在usort函数中指定它:

function my_sort_function($itemA, $itemB){
    // ...
}
usort($group, 'my_sort_function');

答案 1 :(得分:0)

由于您的阵列有两个级别,您希望如何管理全局排序? 你想对每个子数组(A,B,...)进行排序吗?

在这种情况下,方法是对每个子数组(A和B)使用函数uksort,并定义自己的比较函数来比较delais_livraison值。

答案 2 :(得分:-1)

您似乎在寻找ksort,或者,如果您必须提供自己的比较功能,uksort