PHP でのキー順序の維持 uasort によるソート
PHP で uasort 関数を使用して連想配列をソートする場合、複数のキーが同じ値を共有している場合でも、元のキーの順序を保持する安定したソート。
解決策
PHP はデフォルトで安定したソートをサポートしなくなったため、カスタム関数は必須です:
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { // Base cases for arrays of size < 2 if (count($array) < 2) return; // Split the array in half $halfway = count($array) / 2; $array1 = array_slice($array, 0, $halfway); $array2 = array_slice($array, $halfway); // Recursively sort the halves mergesort($array1, $cmp_function); mergesort($array2, $cmp_function); // Handle case if $array1 is entirely less than $array2 if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) { $array = array_merge($array1, $array2); return; } // Merge the two sorted arrays $array = array(); $ptr1 = $ptr2 = 0; while ($ptr1 < count($array1) && $ptr2 < count($array2)) { if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) { $array[] = $array1[$ptr1++]; } else { $array[] = $array2[$ptr2++]; } } // Merge the remainder while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++]; while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++]; return; }</code>
使用法
単に mergesort 関数を使用して連想配列を並べ替え、それを最初の引数と値を比較するための匿名関数として渡します (オプション):
<code class="php">uasort($arr, function($a, $b){ return ($a == $b)?1:($a - $b); });</code>
以上がPHP で uasort を使用して連想配列をソートするときにキーの順序を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。