2016-09-01 82 views
-2

我正在尋找一種方法來排序數組,看起來像這樣:通過子數組的第一個元素的字母順序排序陣列

$array = array(
    [0] => array('a', '1', '2', '3', '4,' test'), 
    [1] => array('c', '1', '2', '3', '5', 'test'), 
    [2] => array('b', '1', '3', '4,' 5,', 'test), 
); 

,使其排序子陣列的根據子數組的第一個元素,這樣它返回:

$array = array(
    [0] => array('a', '1', '2', '3', '4,' test'), 
    [1] => array('b', '1', '3', '4,' 5,', 'test), 
    [2] => array('c', '1', '2', '3', '5', 'test'), 
); 

有沒有人有這樣做的好方法?

謝謝!

+0

使用'usort'功能。大量的例子無處不在 –

+0

_有沒有人有這樣做的好方法?_你有什麼方法嘗試遠? –

+0

將父數組重構爲關聯數組,其中每個鍵都是每個子數組的第0個元素,並且該值是子數組。然後使用kso​​rt() –

回答

1
<?php 

$array = array(
    0 => array('a', '1', '2', '3', '4', 'test'), 
    1 => array('c', '1', '2', '3', '5', 'test'), 
    2 => array('b', '1', '3', '4', '5', 'test'), 
); 

array_multisort(array_column($array, 1), SORT_ASC, $array); 

print_r($array); 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => a 
      [1] => 1 
      [2] => 2 
      [3] => 3 
      [4] => 4 
      [5] => test 
     ) 

    [1] => Array 
     (
      [0] => b 
      [1] => 1 
      [2] => 3 
      [3] => 4 
      [4] => 5 
      [5] => test 
     ) 

    [2] => Array 
     (
      [0] => c 
      [1] => 1 
      [2] => 2 
      [3] => 3 
      [4] => 5 
      [5] => test 
     ) 

) 

https://eval.in/633355

+0

_Why是array_multisort中的3個arg數組?不明白嗎?_我知道了,閱讀文件是有用的:) – JustOnUnderMillions

1

usort是你所需要的:http://php.net/manual/en/function.usort.php

對於PHP 7:

usort($myArray, function($a, $b) { 
    return $a['order'] <=> $b['order']; 
}); 

PHP 5.3或++

usort($myArray, function($a, $b) { 
    return $a['order'] - $b['order']; 
}); 

PHP 5.2或更早版本

function mySort($a, $b) { 
    return $a['order'] - $b['order']; 
} 

usort($myArray, 'mySort'); 

編輯: mySort,而不是從 '排序' @不要驚慌「的評論。謝謝 !

0

確實使用usort()PHP manual

$array = array(
     array('a', '1', '2', '3', '4','test'), 
     array('c', '1', '2', '3', '5', 'test'), 
     array('b', '1', '3', '4','5','test')); 

usort($array, function ($a, $b) 
     { 
      if ($a[0] == $b[0]) { 
       return 0; 
      } 
      return ($a[0] < $b[0]) ? -1 : 1; 
     }); 

var_dump($array);