2017-09-14 11 views
1

特定のキーワードに基づいて2番目の値をソートしようとしています。この場合、そのキーワードはredです。キーワードに基づいて2次配列の値を並べ替えます

コールバック関数のステップを調べるとうまくいくようですが、最終的な結果は変わりません。また、トップレベルのキーをアルファベット順にソートします。

$data = array(
    'foo' => array(
     'red', 'green' 
    ), 
    'bar' => array(
     'yellow', 'red' 
    ), 
); 

print_r($data); 

uasort($data, function($data) { 
    $matches = preg_grep("/red/", $data); 

    $rest = array_diff($data, $matches); 

    $order = array_merge($matches, $rest); 

    return $order; 

}); 

print_r($data); 

答えて

2

意図したとおりuasort()だけあなたが最初の引数、第一レベルの配列($データ)に渡した配列をソートしますので、あなたのコードは動作しません。コードの残りの部分は、実行中で構文的には正しいものの、どちらも役に立ちません。

$data = array(
    'foo' => array(
     'red', 'green' 
    ), 
    'bar' => array(
     'yellow', 'red' 
    ), 
); 

array_walk($data,function(&$v){ 
    uasort($v,function($a,$b){ 
     return preg_match('/red/',$a)?-1:1; 
});}); 

print_r($data); 
  • array_walks()第一レベルのアレイを反復:ここ

    は実施例です。

  • uasort()はコールバックで提供され、2レベル配列のソート部分を処理します。
  • preg_match()を使用して文字列を照合し、コールバックの並べ替えに適した値をuasort()に返します。
関連する問題