簡體   English   中英

排序多維數組優先子串

[英]Sort multidimensional array prioritising substring

我有一個多維數組可以使用並在PHP中排序。 我正在嘗試按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對子字符串進行排序將為我帶來令人滿意的結果,但是我錯了。 也許我太努力了。

任何幫助將不勝感激。 提前致謝。

我認為usort實際上是您所需要的,但是我認為您使用它的方式是錯誤的。 如果需要排序

  • 按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;

}

這應該做的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM