2

ご家族に会えてうれしいです。

私はこの多次元配列を持っています:

$data[] = array('name' => 'Mini 16', 'id' => 105);
$data[] = array('name' => 'Mini 15', 'id' => 5650);
$data[] = array('name' => 'Mini 100', 'id' => 9889);
$data[] = array('name' => 'Mini 20', 'id' => 587);

自然な並べ替えで名前の列で配列を並べ替えたいのですが、私には難しいです。

$data[] = array('name' => 'Mini 15', 'id' => 5650);
$data[] = array('name' => 'Mini 16', 'id' => 105);
$data[] = array('name' => 'Mini 20', 'id' => 587);
$data[] = array('name' => 'Mini 100', 'id' => 9889);

よろしくお願いします

4

2 に答える 2

7

を使用usort()してカスタム関数で配列をソートし、strnatcmp()次のように 2 つの文字列を自然に比較するために使用できます。

usort( $data, function( $el1, $el2) { return strnatcmp( $el1['name'], $el2['name']); });

だから前に、あなたの配列はこれでした:

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 16"
    ["id"]=>
    int(105)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 15"
    ["id"]=>
    int(5650)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(8) "Mini 100"
    ["id"]=>
    int(9889)
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 20"
    ["id"]=>
    int(587)
  }
}

そして今、それは次のようになります:

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 15"
    ["id"]=>
    int(5650)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 16"
    ["id"]=>
    int(105)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(7) "Mini 20"
    ["id"]=>
    int(587)
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(8) "Mini 100"
    ["id"]=>
    int(9889)
  }
}

PHP の下位バージョンでは、無名関数を使用できず、代わりに次のようなものが必要になることに注意してください。

usort( $data, create_function( '$el1, $el2', 'return strnatcmp( $el1[\'name\'], $el2[\'name\']);' ));
于 2012-07-03T16:13:50.463 に答える
3

PHP 5.4 以降を使用array_multisortしている場合は、SORT_NATURALフラグを使用できます。http://php.net/manual/en/function.array-multisort.phpドキュメントの例 #3 に従ってください。ただし、SORT_NATURALオプションを追加してください。

于 2013-03-28T15:49:21.647 に答える