【问题标题】:Laravel nested array sorting by first valueLaravel 嵌套数组按第一个值排序
【发布时间】:2018-06-07 21:09:08
【问题描述】:

在开发 Laravel 应用程序时,我遇到了一个数组排序问题。一开始,我使用分区问题将我的数组按时间分成相等的块,但现在我遇到了按数组的 id 排序的问题。

我的数组:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    array(8) {
      [0]=>
      int(4)  <----- this is value i need to sort by
      [1]=>
      int(15)
      [2]=>
      string(64) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [1]=>
    array(8) {
      [0]=>
      int(6)
      [1]=>
      int(10)
      [2]=>
      string(64) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [2]=>
    array(8) {
      [0]=>
      int(2)
      [1]=>
      int(8)
      [2]=>
      string(85) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
  }
  [1]=>
  array(3) {
    [0]=>
    array(8) {
      [0]=>
      int(3)
      [1]=>
      int(14)
      [2]=>
      string(158) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [1]=>
    array(8) {
      [0]=>
      int(5)
      [1]=>
      int(12)
      [2]=>
      string(158) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [2]=>
    array(8) {
      [0]=>
      int(1)
      [1]=>
      int(7)
      [2]=>
      string(55) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
  }
}

我需要按每个数组的第一个值排序,即我的 id。

我需要的输出:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    array(8) {
      [0]=>
      int(1)
      [1]=>
      int(15)
      [2]=>
      string(64) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [1]=>
    array(8) {
      [0]=>
      int(2)
      [1]=>
      int(10)
      [2]=>
      string(64) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [2]=>
    array(8) {
      [0]=>
      int(3)
      [1]=>
      int(8)
      [2]=>
      string(85) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
  }
  [1]=>
  array(3) {
    [0]=>
    array(8) {
      [0]=>
      int(4)
      [1]=>
      int(14)
      [2]=>
      string(158) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [1]=>
    array(8) {
      [0]=>
      int(5)
      [1]=>
      int(12)
      [2]=>
      string(158) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
    [2]=>
    array(8) {
      [0]=>
      int(6)
      [1]=>
      int(7)
      [2]=>
      string(55) "text..."
      [3]=>
      string(6) "650008"
      [4]=>
      string(13) "NP08KDT"
      [5]=>
      int(48)
      [6]=>
      string(6) "456467"
      [7]=>
      int(33)
    }
  }
}

也许你们中的任何人都有任何解决方案,我可以如何解决这个问题,到目前为止,我尝试了很多排序功能,但它们似乎都不适合我。

谢谢!

【问题讨论】:

    标签: php arrays laravel sorting


    【解决方案1】:

    这可能不是最好的方法,但您可以尝试类似的方法。

    $tempArray = array();
    $sortedArray = array();
    
    foreach ($yourArray as $key1 => $arr){// create 2D array
    
        foreach ($arr as $key2 => $arr2){
            $tempArray[] = $arr2;        
        }
    
    }
    
    foreach ($tempArray as $keyTemp => $tempElem){
    
        $sortingArray[] = $tempElem[0];//get array value you need to sort
    
    }    
    asort($sortingArray);// sort array maintaining the key
    
    foreach ($sortingArray as $keySort => $sortElem){//loop through sorted array to push elements to a new array
        $sortedArray[] = $tempArray[$keySort];
    }
    
    print_r($sortedArray);
    

    【讨论】:

    • 几乎可以工作了! :) 只是对每个数组进行排序,我需要它通过这两个数组从 1 上升到 6。我希望你明白我的意思:)
    • 我认为你需要每个数组单独排序(正如你在问题的输出中提到的那样)。更改了我的答案,请检查编辑
    • 哦,我可能真的不擅长解释事情,嗯,怎么说呢,这里的想法工作得很好,但是假设我有这两个数组,现在他们的 id 非常随机,所以我需要的是这两个数组都是升序的,例如:array1 - 1, 2, 3;数组2 - 4、5、6;我希望现在它更清楚了,非常感谢您的努力,将您的答案标记为已解决:)
    • 想我现在明白了。您可能需要为此做一些解决方法。一种方法是您可以将array_chunk 用于$sortedArray。不管怎样,试一试,感谢您选择这个作为正确答案:)
    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多