ホームページ  >  記事  >  バックエンド開発  >  PHPでキー名を変えずに2次元配列をソートする方法の紹介(コード例)

PHPでキー名を変えずに2次元配列をソートする方法の紹介(コード例)

不言
不言転載
2019-02-27 09:42:262272ブラウズ

この記事では、PHP でキー名を変えずに 2 次元配列をソートする方法 (コード例) を紹介します。一定の参考価値があります。困っている友人が参考になれば幸いです。役に立ちました。役に立ちました。

2次元配列に指定されたキー名を並べ替えるには、まずarray_multisort関数を思い浮かべると思いますが、array_multisort関数の使い方については以前記事を書きました。例を見てみましょう:

ee1e477732f941563dde11c19100b482 array(
        'age' => 22,
        'name' => '鸠摩智'
    ),
    1007 => array(
        'age' => 21,
        'name' => '慕容复'
    ),
    1004 => array(
        'age' => 27,
        'name' => '乔帮主'
    )
);
 

 = array_column(, 'age'(, SORT_ASC, ();

注意深い友人は、キー名がリセットされ、キー名が 0 から始まることに気づくでしょう。望む結果が得られない場合、キー名を変更しないようにするにはどうすればよいでしょうか?

別の例を見てみましょう:

$data = array(
=> array(
        'age' => 22,
        'name' => '鸠摩智'
    ),
=> array(
        'age' => 21,
        'name' => '慕容复'
    ),
=> array(
        'age' => 27,
        'name' => '乔帮主'
    )
);
//根据字段age对数组$data进行降序排列
$data = arraySort($data, "age", "desc" );
print_r($data);

/**
 * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序
 * @param array $arr 将要排序的数组
 * @param string $keys 指定排序的key
 * @param string $type 排序类型 asc | desc
 * @return array
 */
function arraySort($arr, $keys, $type = 'asc')
{
    $keysvalue = $new_array = array();
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }

    if ($type == 'asc') {
        natsort($keysvalue);
    }
    if ($type == 'desc') {
        natsort($keysvalue);
        $keysvalue = array_reverse($keysvalue, TRUE); // 将原数组中的元素顺序翻转,如果第二个参数指定为 true,则元素的键名保持不变
    }
    foreach ($keysvalue as $k => $v) {
        $new_array[$k] = $arr[$k];
    }
    return $new_array;
}

ここでは、arraySort 関数を単純化することもでき、処理結果は同じです:

/**
 * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序
 * @param array $arr 将要排序的数组
 * @param string $keys 指定排序的key
 * @param string $type 排序类型 asc | desc
 * @return array
 */
function arraySort($arr, $keys, $type = 'asc')
{
    $keysvalue = $new_array = array();
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }

    $type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
    foreach ($keysvalue as $k => $v) {
        $new_array[$k] = $arr[$k];
    }
    return $new_array;
}

上記の結果からわかること:


キー名は変更されず、実装原理は非常にシンプルです。まずキー名を取り出し、次にキー名をソートし、対応するキー名に値を代入して新しい配列を形成し、それを返します。

ご覧のとおり、ここでは主に PHP のいくつかのコアソート関数を使用します。

asort() は、キー値によって連想配列を昇順にソートします。

arsort() は、キー値の降順で連想配列を並べ替えます。

natsort() は「自然なソート」、つまり 1 から 9 までの数字のソート方法と、a から z までの文字のソート方法を実装しており、短いものが優先されます。配列のインデックスはセル値

に関連付けられています。 注: 自然な並べ替えアルゴリズムでは、数値 2 は数値 10 より小さくなります。コンピューターの並べ替えアルゴリズムでは、「10」の最初の数字が 2 より小さいため、10 は 2 より小さくなります。

以上がPHPでキー名を変えずに2次元配列をソートする方法の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。