【PHP】これで分かる関数! – 配列の変更 –

PHP

更新履歴

更新日更新者更新内容
2021/8/11JJI・はじめにの段落を修正
・サンプルプログラムの説明を追記
・サンプルプログラムが長いため、段落を追加
2021/8/19JJI・サンプルプログラムの実行結果に画面の画像を追加

はじめに

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

配列の変更

配列を変更する方法として次の内容について説明します。

配列内容
配列配列の順序を入れ替える
配列の添え字(キー)の開始位置を変更する
PHP標準の関数array_replace()を使用して配列の値を変更する
連想配列配列の添え字(キー)を変更する
PHP標準の関数array_replace()を使用して配列の値を変更する

配列

サンプルプログラム1

配列の順序を変える場合、次のコードのように別の配列に順序を入れた配列の要素を設定します。

$result[0] = $ary1[2];

配列の添え字を入れ替える場合も次のコードのように別の配列に設定する際、配列の添え字を変えることでできます。

$result[1] = $ary1[0];

上記の方法を使用したサンプルプログラムです。

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

    echo "ファイル名:sample02_03_11.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "配列の変更<br>\n";

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

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

    // 配列の順序の変更
    // ["山田", "太郎", 35, "男性"] → [35, "山田", "太郎", "男性"]
    echo '配列の順序変更["山田", "太郎", 35, "男性"] → [35, "山田", "太郎", "男性"]<br>' . "\n";
    $result[0] = $ary1[2];
    $result[1] = $ary1[0];
    $result[2] = $ary1[1];
    $result[3] = $ary1[3];

    // 変更後の配列の出力
    echo_array1($result);

    // 配列のキーをずらす
    // 0番目の開始から1番目の開始に変更
    echo "配列の開始位置を0番目から1番目に変更<br>\n";    
    $i = 1;
    foreach($ary1 as $data) {
        $result2[$i] = $data;
        $i++;
    }

    // 変更後の配列の出力
    echo_array1($result2);
?>

実行結果は次の通りです。

・画面

・HTML

ファイル名:sample02_03_11.php<br>
【PHP】関数<br>
配列の変更<br>
変更前の配列<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性:<br><br>
配列の順序変更["山田", "太郎", 35, "男性"] → [35, "山田", "太郎", "男性"]<br>
[0]:35: [1]:山田: [2]:太郎: [3]:男性:<br><br>
配列の開始位置を0番目から1番目に変更<br>
[1]:山田: [2]:太郎: [3]:35: [4]:男性:<br><br>

サンプルプログラム2

array_replace()を使用すると複数の配列の要素を変更ができます。
サンプルプログラムは次の通りです。

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

    echo "ファイル名:sample02_03_11_2.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "配列の変更<br>\n";

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

    $ary2 = [
        1 => "次郎", 2 => 30
    ];

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

    // 配列の変更
    $result = array_replace($ary1, $ary2);

    // 変更後の配列の出力
    echo "変更後の配列<br>\n";
    echo_array1($result);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_03_11_2.php<br>
【PHP】関数<br>
配列の変更<br>
変更前の配列<br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性:<br><br>
変更後の配列<br>
[0]:山田: [1]:次郎: [2]:30: [3]:男性:<br><br>

連想配列

連想配列では、配列の添え字(キー)を変更する方法には次の方法があります。
コードを自作で書くこともできますが、PHP標準で提供されている関数を使った方が簡単に書くことができるので、関数を使用することをおすすめします。

1. 連想配列の添え字を変更する
次のコードのようにarray_values()で配列の値を取り出した配列と、添え字用の配列をarray_combine()関数で結合する

// 連想配列から添え字がついた値の配列を返す
$values = array_values($ary1);

// キーの配列
$keys = ["sei", "mei", "nenrei", "gender"];

// キーの配列と値の配列を結合し、新しい連想配列を作る
$result = array_combine($keys, $values);

2.連想配列の値を変更する
次のコードのようにarray_replace()を使用する

$result = array_replace($ary1, $ary2);

サンプルプログラム1

連想配列の添え字を変更する サンプルプログラムです。

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

    echo "ファイル名:sample02_03_12.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "連想配列の変更<br>\n";

    // 1次元連想配列
    $ary1 = [
        "first_name" => "山田", "second_name" => "太郎", "age" => 35, "seibetsu" => "男性"
    ];

    // 配列の出力
    echo "変更前の配列数:" . count($ary1) . "<br>\n";
    echo_array1($ary1);

    // 配列のキー変更
    // 連想配列から添え字がついた値の配列を返す
    $values = array_values($ary1);
    echo_array1($values);

    // キーの配列
    $keys = ["sei", "mei", "nenrei", "gender"];

    // キーの配列と値の配列を結合し、新しい連想配列を作る
    $result = array_combine($keys, $values);

    // 配列の出力
    echo "変更後の配列数:" . count($result) . "<br>\n";
    echo_array1($result);
?>

実行結果は次の通りです。

・画面

・HTML

ファイル名:sample02_03_12.php<br>
【PHP】関数<br>
連想配列の変更<br>
変更前の配列数:4<br>
[first_name]:山田: [second_name]:太郎: [age]:35: [seibetsu]:男性:<br><br>
[0]:山田: [1]:太郎: [2]:35: [3]:男性:<br><br>
変更後の配列数:4<br>
[sei]:山田: [mei]:太郎: [nenrei]:35: [gender]:男性:<br><br>

サンプルプログラム2

連想配列の値を変更するサンプルプログラムです。

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

    echo "ファイル名:sample02_03_12_2.php<br>\n";
    echo "【PHP】関数<br>\n";
    echo "連想配列の変更<br>\n";

    // 1次元連想配列
    $ary1 = [
        "first_name" => "山田", "second_name" => "太郎", "age" => 35, "seibetsu" => "男性"
    ];

    $ary2 = [
        "second_name" => "次郎", "age" => 30
    ];

    // 配列の出力
    echo "変更前の配列数:" . count($ary1) . "<br>\n";
    echo_array1($ary1);

    $result = array_replace($ary1, $ary2);

    // 配列の出力
    echo "変更後の配列数:" . count($result) . "<br>\n";
    echo_array1($result);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_03_12_2.php<br>
【PHP】関数<br>
連想配列の変更<br>
変更前の配列数:4<br>
[first_name]:山田: [second_name]:太郎: [age]:35: [seibetsu]:男性:<br><br>
変更後の配列数:4<br>
[first_name]:山田: [second_name]:次郎: [age]:30: [seibetsu]:男性:<br><br>

コメント