PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

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データの加工など、実務でも役立つテクニックなので、ぜひ覚えておきましょう。

  1. PHPのarray_key_exists()関数とは?使い方とサンプルコードを解説

    PHPのarray_key_exists()関数は、指定したキーが配列内に存在するかどうかをチェックするための関数です。キーが存在する場合は true を返し、存在しない場合は false を返します。基本構文array_key_exists(key, arr)パラメータkey − 存在を確認したいキーを指定します。文字列や整数など、配列のキーとして有効な値を指定できます。arr − キーを検索する対象となる配列を指定します。戻り値array_key_exists()関数は、指定したキーが配列内に存在すれば true を、存在しなければ false を返します。使用例以下の例では、連想配列の中

  2. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に