1

以下を使用して、多次元配列を画面名で並べ替えます。

$sortArray = array();

foreach($members as $member){
    foreach($member as $key=>$value){
        if(!isset($sortArray[$key])){
            $sortArray[$key] = array();
        }
        $sortArray[$key][] = $value;
    }
}

$orderby = "screen_name";

array_multisort($sortArray[$orderby],SORT_ASC,$members);

しかし、大文字は小文字の前にソートされています:

アランブレンダグレッグは働きます

しかし、フランクはダンの前に来る

配列の並べ替えにはたくさんのことがありますが、私はついに上記を使用してこれを機能させました。それを修正する簡単な方法があるかどうかを確認したいですか?

4

2 に答える 2

1

uasort()はあなたのために働くはずです

<?php

// custom sort function
function sort_by_screen_name($a, $b) {

    // compare using lowercase strings only
    $a = strtolower($a['screen_name']);
    $b = strtolower($b['screen_name']);

    if ($a == $b) {
        return 0;
    }

    return ($a < $b) ? -1 : 1;
}

$members = array(
    array('screen_name'=>'Greg'),
    array('screen_name'=>'Allen'),
    array('screen_name'=>'dan'),
    array('screen_name'=>'Brenda'),
);

// uasort() like a boss!
uasort($members, 'sort_by_screen_name');

print_r($members);

出力

Array
(
    [1] => Array
        (
            [screen_name] => Allen
        )

    [3] => Array
        (
            [screen_name] => Brenda
        )

    [2] => Array
        (
            [screen_name] => dan
        )

    [0] => Array
        (
            [screen_name] => Greg
        )

)

注:元の配列キーは、このメソッドを使用して保持されます。キーを書き直したい場合は、を使用するだけusort()です。

于 2012-05-01T22:08:27.233 に答える
1

これはusort()、カスタムの並べ替え機能で並べ替えることができます。独自のカスタム詳細にどのように適合するかを確認したい場合は、このデータを変更できます:http: //codepad.org/b89HwmbM

$members = array(
  array( "loc" => "Ontario",   "first" => "Bob",  "screen_name" => "fooArt" ),
  array( "loc" => "Atlanta",   "first" => "Sal",  "screen_name" => "TIMMY!" ),
  array( "loc" => "Panama",    "first" => "Mick", "screen_name" => "Analog" ),
  array( "loc" => "Pensacola", "first" => "A",    "screen_name" => "Franky" ),
  array( "loc" => "McPherson", "first" => "Anna", "screen_name" => "annie9" )
);

usort( $members, 'custom_sort' );

function custom_sort( $m1, $m2 ){
  return strtolower( $m1['screen_name'] ) > strtolower( $m2['screen_name'] );
};

このソート方法からの出力は次のとおりです。

Array
(
    [0] => Array
        (
            [loc] => Panama
            [first] => Mick
            [screen_name] => Analog
        )

    [1] => Array
        (
            [loc] => McPherson
            [first] => Anna
            [screen_name] => annie_23
        )

    [2] => Array
        (
            [loc] => Ontario
            [first] => Bob
            [screen_name] => fooArt
        )

    [3] => Array
        (
            [loc] => Pensacola
            [first] => A
            [screen_name] => Franky
        )

    [4] => Array
        (
            [loc] => Atlanta
            [first] => Sal
            [screen_name] => TIMMY!
        )

)
于 2012-05-01T22:10:18.260 に答える