PHPで配列の要素を削除してインデックスを振り直す方法
PHPでは、unset()関数を使うことで配列から特定の要素を削除できます。しかし、unset()で要素を削除しただけでは、配列のキー(インデックス)には欠番が残ったままになります。そこで、array_values()関数を組み合わせることで、削除後の配列に対して連番のインデックスを振り直すことができます。
配列要素の削除とインデックス再構築の手順
以下のコードでは、前後に空白を含む文字列の配列を用意し、array_map()で空白を取り除いた後、unset()で要素を削除し、最後にarray_values()でインデックスを振り直しています。
サンプルコード
<?php
$arr = array( " John ", "Jacob ", " Tom ", " Tim ");
echo "前後に空白を含む配列...\n";
foreach( $arr as $value ) {
echo "値 = $value \n";
}
echo "\nカンマ区切りのリスト...\n";
print_r(implode(', ', $arr));
// trim関数で各要素の前後の空白を除去
$result = array_map('trim', $arr);
echo "\n更新後の配列...\n";
foreach( $result as $value ) {
echo "値 = $value \n";
}
// インデックス1の要素「Jacob」を削除
unset($result[1]);
echo "\n更新後の配列...インデックス振り直し\n";
// array_values()でキーを0からの連番に再構築
$result2 = array_values($result);
foreach( $result2 as $value ) {
echo "値 = $value \n";
}
?>
実行結果
上記のコードを実行すると、次のような出力が得られます。
前後に空白を含む配列... 値 = John 値 = Jacob 値 = Tom 値 = Tim カンマ区切りのリスト... John , Jacob , Tom , Tim 更新後の配列... 値 = John 値 = Jacob 値 = Tom 値 = Tim 更新後の配列...インデックス振り直し 値 = John 値 = Tom 値 = Tim
ポイント解説
- unset($result[1]):指定したキーの要素を配列から削除します。この時点ではキーは
0, 2, 3のように欠番を含んだ状態になります。 - array_values($result):配列のすべての値を取得し、新しい配列として
0から始まる連番のキーを割り当てます。これにより、削除後の配列でもインデックスが整然とした状態になります。 - array_map('trim', $arr):配列の各要素に関数を適用するための関数です。ここでは
trim()を使って各文字列の前後の空白を除去しています。
foreachループで配列を順番に処理する場合など、キーが連続していることが前提となるケースでは、array_values()によるインデックスの振り直しが特に有効です。
-
PHPの配列からランダムな値を取得する方法|array_rand()関数の使い方
PHPで配列からランダムな値を取得するには、array_rand()関数を使います。この関数は配列からランダムなキーを返すため、そのキーを指定して対応する値にアクセスするのが基本の流れです。 array_rand()関数とは array_rand()は、配列から1つ以上のランダムなキーを取り出すPHPの組み込み関数です。構文は以下の通りです。 array_rand( array $array, int $num = 1 ) : int|string|array 第1引数: 対象となる配列を指定します。 第2引数: 取得するキーの個数を指定します(省略可、デフォルトは1)。2以上を指定した場合
-
PHPの値渡し(Pass by Value)と参照渡し(Pass by Reference)とは?違いをわかりやすく解説
この記事では、PHPにおける「値渡し(Pass by Value)」と「参照渡し(Pass by Reference)」という2つの重要な概念について、サンプルコードを交えながら詳しく解説します。 値渡し(Pass by Value)とは PHPでは一般的に、関数へ引数を渡す際に「値渡し」の方式が用いられます。この方式では引数のコピーが関数に渡されるため、関数内で引数の値を変更しても、関数の外部にある元の変数には一切影響しません。これにより、意図しない副作用を防ぎ、安全なコードを書くことができます。 参照渡し(Pass by Reference)とは 一方、関数の中で引数そのものを変更したいケ