PHPで配列のインデックスを再作成する方法をわかりやすく解説
PHPでは、array_combine()とrange()、array_values()を組み合わせることで、配列のインデックス(キー)を簡単に振り直すことができます。この記事では、数値キーの場合と文字列キーの場合の2つのパターンを、実際のコード例と実行結果とともに詳しく解説します。
インデックス再作成の基本的な仕組み
インデックスの振り直しには、主に以下の3つの関数を使用します。
- range(): 指定した範囲の連続した値(数値やアルファベットなど)からなる配列を生成します
- array_values(): 配列からすべての値を取り出し、新しい配列として返します
- array_combine(): 片方の配列を「キー」、もう片方の配列を「値」として、新しい配列を結合して作成します
この3つを組み合わせることで、「任意の開始位置から連番を振り直す」「アルファベット順のキーを付け直す」といった処理が実現できます。
例1:数値キーを指定した開始番号から振り直す
まずは、数値インデックスを持つ配列のキーを「2」から始まる連番に振り直す例を見てみましょう。
<?php
$arr = array( 0=>"150", 1=>"100", 2=>"120", 3=>"110", 4=>"115" );
echo "Array...\n";
foreach( $arr as $key => $value) {
echo " Key = " . $key . ", Value = " . $value . "\n";
}
$arr = array_combine(range(2,
count($arr) + (1)),
array_values($arr));
echo "\nArray after re-indexing\n";
foreach( $arr as $key => $value) {
echo " Key = " . $key . ", Value = " . $value . "\n";
}
?>
コードのポイント
count($arr) + 1によって終了番号を求め、range(2, 終了番号)で「2〜6」の連続したキーを生成しています。そしてarray_values($arr)で元の配列の値だけを抽出し、array_combine()で新しいキーと結合しています。
出力結果
Array... Key = 0, Value = 150 Key = 1, Value = 100 Key = 2, Value = 120 Key = 3, Value = 110 Key = 4, Value = 115 Array after re-indexing Key = 2, Value = 150 Key = 3, Value = 100 Key = 4, Value = 120 Key = 5, Value = 110 Key = 6, Value = 115
実行結果から分かるように、元々「0〜4」だったキーが、要素の並び順と値を保ったまま「2〜6」に振り直されています。
例2:文字列キーを別の開始位置から振り直す
次に、アルファベットの文字列キー(a, b, c…)を持つ連想配列を、「b」から始まるキーに振り直す例です。
<?php
$arr = array( "a"=>"150", "b"=>"100", "c"=>"120", "d" =>"110", "e"=>"115" );
echo "Array...\n";
foreach( $arr as $key => $value) {
echo " Key = " . $key . ", Value = " . $value . "\n";
}
$arr = array_combine(range("b",
chr(count($arr) + (ord("b")-1))),
array_values($arr));
echo "\nArray after re-indexing\n";
foreach( $arr as $key => $value) {
echo " Key = " . $key . ", Value = " . $value . "\n";
}
?>
コードのポイント
ord("b")は文字「b」のASCIIコード(98)を取得し、chr()は数値を対応する文字に変換します。chr(count($arr) + ord("b") - 1)により、要素数に応じた終了キーの文字(この場合は「f」)を算出しています。これにより、range("b", "f")が「b, c, d, e, f」という文字キーの配列を生成します。
出力結果
Array... Key = a, Value = 150 Key = b, Value = 100 Key = c, Value = 120 Key = d, Value = 110 Key = e, Value = 115 Array after re-indexing Key = b, Value = 150 Key = c, Value = 100 Key = d, Value = 120 Key = e, Value = 110 Key = f, Value = 115
このように、文字列キーも数値キーと同様の考え方で、任意の開始位置から順番に振り直すことができます。
まとめ
PHPで配列のインデックスを再作成するには、array_combine() + range() + array_values()の組み合わせが便利です。数値キーなら開始番号と要素数から範囲を指定し、文字列キーならord()とchr()を使ってアルファベットの範囲を計算することで、柔軟にキーを振り直せます。データベースの検索結果の整形や、CSVデータの加工など、実務でも役立つテクニックなので、ぜひ覚えておきましょう。
-
PHPのarray_key_exists()関数とは?使い方とサンプルコードを解説
PHPのarray_key_exists()関数は、指定したキーが配列内に存在するかどうかをチェックするための関数です。キーが存在する場合は true を返し、存在しない場合は false を返します。基本構文array_key_exists(key, arr)パラメータkey − 存在を確認したいキーを指定します。文字列や整数など、配列のキーとして有効な値を指定できます。arr − キーを検索する対象となる配列を指定します。戻り値array_key_exists()関数は、指定したキーが配列内に存在すれば true を、存在しなければ false を返します。使用例以下の例では、連想配列の中
-
PHPのarray()関数とは?配列の作成方法をわかりやすく解説
PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に