订购基于密钥,订单。 PHP

时间:2015-06-30 21:27:36

标签: php arrays

这里的数组是我创建的数组的var_dump个。我可以发布有关如何请求数组的逻辑,但我希望有足够的信息来提供适当的答案。

我有一个有趣的数组,有一个有趣的排序问题。存在key=>value方面,其中值为int。然后有order的键,其值为int。

例如:

array (size=2)
  0 => 
    array (size=1)
      'main-page/_child_page' => 
        array (size=2)
          'order' => int 0
          'fields' => 
            array (size=2)
              ...
  1 => 
    array (size=1)
      'main-page/_secondary_child_page' => int 1

数组的上述var转储包含两件事:order的键值0key=>value(数组中的元素2),值为{{ 1}}。

现在这个阵列处于完美状态。但如果1是3,该怎么办?我希望对数组进行排序的方式是:

order

这是我提出的问题 - 可以这样做吗?如果是这样的话:怎么做?

“订单”的概念或在这种情况下:array (size=2) 0 => array (size=1) 'main-page/_secondary_child_page' => int 1 1 => array (size=1) 'main-page/_child_page' => array (size=2) 'order' => int 3 'fields' => array (size=2) ... order非常重要。我知道必须制作一个新阵列。但问题是我该如何干净利落地做到这一点?

2 个答案:

答案 0 :(得分:0)

我希望这会有所帮助:

usort($array,'compare');

function compare($item1,$item2){
   return getValue($item1) - getValue($item2);
}

function getValue($item){
    if(is_int($item))return $item;
    if(is_array($item))return getValue(reset($item));
    trigger_error(E_NOTICE,"undefined item type: ".$item);
}

答案 1 :(得分:0)

不知道数组的目的和可能性使得很难给出一个好的答案,但扩展上面的评论,最好的方法是创建一个原始键的二级数组到一个整数,然后排序基于那个原始数组

注意:我建议不要在原始数组上使用usort或任何其他此类A vs B样式排序器,因为值检索会多次发生,这对您来说是一个昂贵的过程(请参阅如何{{ 1}}在这里多次传递https://ideone.com/OytXZd

这是一个完全符合你想要的功能,所以你应该能够自己解决这个问题。

30

请在此处查看:http://codepad.viper-7.com/BfbvfH