2016-09-15 9 views
0

私は本当にクールなスーパーソート関数を作ろうとしていますが、内部で関数として作成されたときにユーザーソート機能は動作しません。アイデアは、配列とキーの名前を指定することですし、私の選択に従ってソートされた配列を返します。その合格PHPのカスタム関数内でのソート

function super_sort($key,$arr){ 
    usort($arr, function($a, $b){ 
     return strcmp($a[$key], $b[$key]); 
    }); 
    print_sorted($key,$arr); 
} 

私も、私はprint_sorted機能を追加する必要があり、この

super_sort('name',$people); 

ようにそれを呼ぶだろうが、あなたの匿名関数のコンテキスト内に存在しないこの

function print_sorted($key,$arr){ 
    echo '<h1>'.$key.'</h1>'; 
    foreach($arr as $k => $v){ 
    echo '<strong>name:</strong> '.$v['name'].'<strong> age:</strong> '.$v['age'].'<strong> social:</strong> '.$v['social'].'<strong> index:</strong> '.$v['index'].'<br/>'; 
    } 
} 
+1

usort匿名関数の内部で 'use'を使用して、' $のkey'をインポートし、母それは完璧です – Ghost

答えて

2

$keyですそれはuseを使用しています。

usort($arr, function($a, $b) use ($key) { 
    return strcmp($a[$key], $b[$key]); 
}); 

http://php.net/manual/en/functions.anonymous.php

+0

下記の回答を参照してください。あなたは天才です。私はサイトが私を許可するとすぐにあなたの答えをチェックします。あなたはこれに答えることができるかもしれません。注文を後方に返すための簡単な方法はありますか? –

+1

@ThomasValadez、!strcmp($ a [$ key]、$ b [$ key])を使って注文を逆順にすることができます。 –

+0

あなた、このサイトの皆さんは上司です –