TL;DR: 特定の単語の配列を並べ替える必要があります。順序は既存の配列と一致する必要があります。最後のコード ブロックのサンプル コードを参照してください。
タイトルの配列があります。各タイトルの最初の単語は色です。この時点で配列の並べ替えには慣れていますが、これは混乱を招きます。
問題:既に並べ替えられた単語のリストに基づいて、単語の配列を手動で並べ替える必要があります。uasort
次の 2 つの変数を比較できるように設定しました。
// first comparison:
$a_first = strtolower( $a_split[0] ); // white
$b_first = strtolower( $b_split[0] ); // blue
// 2nd comparison:
$a_first = strtolower( $a_split[0] ); // purple
$b_first = strtolower( $b_split[0] ); // white
// 3rd comparison:
$a_first = strtolower( $a_split[0] ); // blue
$b_first = strtolower( $b_split[0] ); // purple
柔術のランク付けシステムのために、これらの色をベルトのランク付けで分類する必要があります。正しい順序の配列は次のとおりです。
$color_order = explode(' ', 'white blue purple brown black black-red coral white-red red');
/* $color_order =
Array (
[0] => white
[1] => blue
[2] => purple
[3] => brown
[4] => black
[5] => black-red
[6] => coral
[7] => white-red
[8] => red
)
Current (incorrect) results:
1. Blue
2. Purple
3. White
Desired results:
1. White
2. Blue
3. Purple
*/
uasort() から出てくる私の現在のコードは、strcmp でアルファベット順にソートされています。strcmp を、カラー配列を使用してソートできるものに置き換える必要があります。(ちなみに、色は単語と一致しません。色は別の配列に移動されるため、ここでエラーをチェックする必要はありません)。
// Sort Step 1: Sort belt level by color
// $video_categories[belt_id][term]->name = "White belt example"
function _sort_belt_names( $a, $b ) {
$a_name = trim( $a['term']->name );
$b_name = trim( $b['term']->name );
$a_split = explode( ' ', $a_name );
$b_split = explode( ' ', $b_name );
if ( $a_split && $b_split ) {
$color_order = explode(' ', 'white blue purple brown black black-red coral white-red red');
// IMPORTANT STUFF BELOW! ----
$a_first = strtolower( $a_split[0] ); // purple
$b_first = strtolower( $b_split[0] ); // white
// Compare $a_first $b_first against $color_order
// White should come first, red should come last
// Return -1 (early), 0 (equal), or 1 (later)
// IMPORTANT STUFF ABOVE! ----
}
// If explode fails, sort original names alphabetically.
return strcmp( $a_name, $b_name );
}
// ---
uasort( $video_categories, '_sort_belt_names' );