【PHP】これで分かる関数! – 配列のソート・マージ –

PHP

更新履歴

更新日更新者更新内容
2021/8/13JJI・”はじめに”の段落の内容を修正
・サンプルプログラムの説明を修正
2021/8/20JJI・サンプルプログラムの実行結果に画面の画像を追加

はじめに

配列を表示するため、次の共通関数を使用している場合があります。

配列のソート

PHPには配列をソートする関数には次のようなものがあります。
この記事では、次のソート関数についてサンプルプログラムを使って使用方法を紹介します。

関数説明(PHPマニュアル抜粋)
arsort連想キーと要素との関係を維持しつつ
配列を降順にソートする
asort連想キーと要素との関係を維持しつつ
配列を昇順にソートする
krsort配列をキーで降順にソートする
ksort配列をキーで昇順にソートする
natcasesort大文字小文字を区別しない”自然順”アルゴリズムを
用いて配列をソートする
natsort“自然順”アルゴリズムで配列をソートする
rsort配列を降順にソートする
sort配列を昇順にソートする

配列

配列ソート関数を使用したサンプルプログラムです。

サンプルプログラム1

次のサンプルプログラムでは、sort()、rsort()、ksort () 、krsort()関数を使用しています。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // ライブラリの読み込み
    require_once "lib/sample_lib_02_03.php";

    echo "ファイル名:sample02_03_21.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "配列のソート<br>\n";

    // 1次元配列
    $ary1 = [
        "山田", "太郎", 35, "男性", "東京都", "090-9999-9999"
    ];

    $org_ary = $ary1;

    // 変更前の配列の出力
    echo "ソート前の配列<br>\n";
    echo_array1($ary1);

    // sort()関数実行後の配列
    sort($ary1);
    echo "sort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // rsort()関数実行後の配列
    $ary1 = $org_ary;
    rsort($ary1);
    echo "rsort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // ksort()関数実行後の配列
    $ary1 = $org_ary;
    ksort($ary1);
    echo "ksort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // krsort()関数実行後の配列
    $ary1 = $org_ary;
    krsort($ary1);
    echo "krsort()関数実行後の配列<br>\n";    
    echo_array1($ary1);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_03_21.php<br>
【PHP】関数<br>
配列のソート<br>
ソート前の配列<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性: [4]:東京都: [5]:090-9999-9999:<br><br>
sort()関数実行後の配列<br>
[0]:太郎: [1]:山田: [2]:東京都: [3]:男性: [4]:35: [5]:090-9999-9999:<br><br>
rsort()関数実行後の配列<br>
[0]:35: [1]:男性: [2]:東京都: [3]:山田: [4]:太郎: [5]:090-9999-9999:<br><br>
ksort()関数実行後の配列<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性: [4]:東京都: [5]:090-9999-9999:<br><br>
krsort()関数実行後の配列<br>
[5]:090-9999-9999: [4]:東京都: [3]:男性: [2]:35: [1]:太郎: [0]:山田:<br><br>

サンプルプログラム2

natcasesort()、natsort()関数を使用したサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // ライブラリの読み込み
    require_once "lib/sample_lib_02_03.php";

    echo "ファイル名:sample02_03_22.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "配列のソート<br>\n";

    // 1次元配列
    $ary1 = [
        "img2.png", "img10.png", "img1.png", "img3.png", "img11.png", "img12.png"
    ];

    // 1次元配列
    $ary2 = [
        "img2.png", "img10.png", "img1.png", "IMG3.png", "IMG11.png", "img12.png"
    ];
    
    // 変更前の配列の出力
    echo "ソート前の配列<br>\n";
    echo_array1($ary1);

    // natsort()関数実行後の配列
    natsort($ary1);
    echo "natsort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // natcasesort()関数実行後の配列
    natcasesort($ary2);
    echo "natcasesort()関数実行後の配列<br>\n";    
    echo_array1($ary2);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_03_22.php<br>
【PHP】関数<br>
配列のソート<br>
ソート前の配列<br>
[0]:img2.png: [1]:img10.png: [2]:img1.png: [3]:img3.png: [4]:img11.png: [5]:img12.png:<br><br>
natsort()関数実行後の配列<br>
[2]:img1.png: [0]:img2.png: [3]:img3.png: [1]:img10.png: [4]:img11.png: [5]:img12.png:<br><br>
natcasesort()関数実行後の配列<br>
[2]:img1.png: [0]:img2.png: [3]:IMG3.png: [1]:img10.png: [4]:IMG11.png: [5]:img12.png:<br><br>

連想配列

連想配列に配列ソート関数を使用したサンプルプログラムです。
使用している関数は、sort()、rsort()、ksort()、krsort()、asort()、arsort()です。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // ライブラリの読み込み
    require_once "lib/sample_lib_02_03.php";

    echo "ファイル名:sample02_03_23.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "連想配列のソート<br>\n";

    // 1次元配列
    $ary1 = [
        "first_name" => "山田", 
        "second_name" => "太郎", 
        "age" => 35,
        "seibetsu" => "男性",
        "pref" => "東京都",
        "tel" => "090-9999-9999"
    ];

    $org_ary = $ary1;

    // 変更前の配列の出力
    echo "ソート前の配列<br>\n";
    echo_array1($ary1);

    // sort()関数実行後の配列
    $ary1 = $org_ary;
    sort($ary1);
    echo "sort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // rsort()関数実行後の配列
    $ary1 = $org_ary;
    rsort($ary1);
    echo "rsort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // ksort()関数実行後の配列
    $ary1 = $org_ary;
    ksort($ary1);
    echo "ksort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // krsort()関数実行後の配列
    $ary1 = $org_ary;
    krsort($ary1);
    echo "krsort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // asort()関数実行後の配列
    $ary1 = $org_ary;
    asort($ary1);
    echo "asort()関数実行後の配列<br>\n";    
    echo_array1($ary1);

    // arsort()関数実行後の配列
    $ary1 = $org_ary;
    arsort($ary1);
    echo "asort()関数実行後の配列<br>\n";    
    echo_array1($ary1);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_03_23.php<br>
【PHP】関数<br>
連想配列のソート<br>
ソート前の配列<br>
[first_name]:山田: [second_name]:太郎: [age]:35: [seibetsu]:男性: [pref]:東京都: [tel]:090-9999-9999:<br><br>
sort()関数実行後の配列<br>
[0]:太郎: [1]:山田: [2]:東京都: [3]:男性: [4]:35: [5]:090-9999-9999:<br><br>
rsort()関数実行後の配列<br>
[0]:35: [1]:男性: [2]:東京都: [3]:山田: [4]:太郎: [5]:090-9999-9999:<br><br>
ksort()関数実行後の配列<br>
[age]:35: [first_name]:山田: [pref]:東京都: [second_name]:太郎: [seibetsu]:男性: [tel]:090-9999-9999:<br><br>
krsort()関数実行後の配列<br>
[tel]:090-9999-9999: [seibetsu]:男性: [second_name]:太郎: [pref]:東京都: [first_name]:山田: [age]:35:<br><br>
asort()関数実行後の配列<br>
[second_name]:太郎: [first_name]:山田: [pref]:東京都: [seibetsu]:男性: [age]:35: [tel]:090-9999-9999:<br><br>
asort()関数実行後の配列<br>
[age]:35: [seibetsu]:男性: [pref]:東京都: [first_name]:山田: [second_name]:太郎: [tel]:090-9999-9999:<br><br>

配列のマージ

配列をマージする場合、array_merge()関数を使用します。
array_merge()関数は配列と連想配列の組み合わせでも使用可能です。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // ライブラリの読み込み
    require_once "lib/sample_lib_02_03.php";

    echo "ファイル名:sample02_03_24.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "配列のマージ<br>\n";

    // 1次元配列
    $ary1 = [
        "山田", "太郎", 35, "男性"
    ];

    $ary2 = [
        "東京都", "090-9999-9999"
    ];

    $ary3 = [
        "post_no" => "999-9999", "birthday" => "1985/3/14"
    ];

    // マージ前の配列の出力
    echo "マージ前の配列ary1<br>\n";
    echo_array1($ary1);

    echo "マージ前の配列ary2<br>\n";
    echo_array1($ary2);

    echo "マージ前の配列ary3<br>\n";
    echo_array1($ary3);

    // array_merge()関数実行後の配列
    $result = array_merge($ary1, $ary2);
    echo '$ary1と$ary2のarray_merge()関数実行後の配列' . "<br>\n";    
    echo_array1($result);

    // array_merge()関数実行後の配列
    $result = array_merge($ary1, $ary3);
    echo '$ary1と$ary3のarray_merge()関数実行後の配列' . "<br>\n";    
    echo_array1($result);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_03_24.php<br>
【PHP】関数<br>
配列のマージ<br>
マージ前の配列ary1<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性:<br><br>
マージ前の配列ary2<br>
[0]:東京都: [1]:090-9999-9999:<br><br>
マージ前の配列ary3<br>
[post_no]:999-9999: [birthday]:1985/3/14:<br><br>
$ary1と$ary2のarray_merge()関数実行後の配列<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性: [4]:東京都: [5]:090-9999-9999:<br><br>
$ary1と$ary3のarray_merge()関数実行後の配列<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性: [post_no]:999-9999: [birthday]:1985/3/14:<br><br>

コメント