对多维数组进行排序,优先考虑子字符串

时间:2014-11-16 09:12:51

标签: php arrays sorting multidimensional-array

我有一个多维数组可以在PHP中使用和排序。 我试图通过 product_code 键对其进行排序。需要安排阵列

  • 首先按 product_code的最后两个字符
  • 的升序排列
  • 然后按照'。'之前的字符的升序排列。 product_code

这是我拥有的数组

Array

(
    [0] => Array
        (
            [product_name] => Stellar
            [product_code] => C5311.01
        )

    [1] => Array
        (
            [product_name] => Luigi
            [product_code] => C5310.02
        )

    [2] => Array
        (
            [product_name] => Apple
            [product_code] => C5310.01
        )

    [3] => Array
        (
            [product_name] => Quietly
            [product_code] => C5311.02
        )
)

这需要按以下方式排序:

Array
(
    [0] => Array
        (
            [product_name] => Apple
            [product_code] => C5310.01
        )


    [1] => Array
        (
            [product_name] => Stellar
            [product_code] => C5311.01
        )

    [2] => Array
        (
            [product_name] => Luigi
            [product_code] => C5310.02
        )


    [3] => Array
        (
            [product_name] => Quietly
            [product_code] => C5311.02
        )

我认为首先用 product_code 键对数组进行排序,然后使用usort对子数据进行排序会产生有利的结果,但我错了。也许我太努力了..

任何帮助都将受到高度赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为usort实际上就是你所需要的,但我认为你使用它的方式是错误的。如果你需要排序

  
      
  • 首先按照product_code的最后两个字符的升序排列
  •   
  • 然后按'。'前面的字符的升序排列。 product_code
  •   

只需编写一个执行此操作的函数并将其传递给usort

function cmp($a,$b){
      $lastTwoDigitsCmp=strcmp(substr($a["product_code"], -2), substr($b["product_code"], -2));
      if($lastTwoDigitsCmp==0)
          return strcmp($a["product_code"],$b["product_code"]);
      else
          return $lastTwoDigitsCmp;

}

这应该可以胜任。