PHP では、最も一般的な 2 次元配列は、キーと値のペアの形式で格納される 2 次元連想配列です。たとえば、次のようになります。
$students = array( array('name' => 'Alice', 'score' => 85), array('name' => 'Bob', 'score' => 72), array('name' => 'Charlie', 'score' => 91) );
上に示すように、$students
配列は生徒の名前と成績を保存するために使用されます。各要素は連想配列です。シナリオによっては、データの転置、つまり各列のデータを 1 つの行に変換し、各行のデータを 1 つの列に変換する必要がある場合があります。たとえば、上記の配列を転置すると、結果は次のようになります。
$transposed = array( array('name' => 'Alice', 'Bob', 'Charlie'), array('score' => 85, 72, 91) );
このような配列構造は、特定の分析や統計演算に適しています。この記事では、PHP を使用して 2 次元連想配列を転置する方法を紹介します。
方法 1: foreach ループを使用して転置する
最も簡単な方法は、foreach ループを使用して元の配列を走査し、新しい配列を生成することです。具体的な実装は次のとおりです。
function array_transpose($array) { $result = array(); foreach ($array as $key => $row) { foreach ($row as $subkey => $subvalue) { $result[$subkey][$key] = $subvalue; } } return $result; }
この関数は、パラメータとして 2 次元の連想配列を受け取り、転置された新しい配列を返します。まず、空の配列 $result
を結果配列として定義します。次に、二重ループを使用して元の配列を反復処理し、行を列に、列を行に変換します。内側のループでは、新しい配列のキーとして $subkey
を使用し、元の配列の値 $subvalue
を新しい配列の値に割り当てます。外側のループでは、新しい配列の列名として $key
を使用し、新しい列を $result
配列に追加します。最後に、新しい転置配列が返されます。
この関数を使用すると、上記の配列例を簡単に転置できます:
$transposed = array_transpose($students);
この方法を使用する利点は、シンプルで理解しやすく、小規模なデータに適していることです。デメリットは、データ量が多いとパフォーマンスが低下することです。
方法 2: array_map 関数と call_user_func_array 関数を使用して転置する
もう 1 つの方法は、PHP が提供する array_map 関数と call_user_func_array 関数を使用することです。このメソッドの実装はより簡単で効率的です。具体的な実装は次のとおりです。
function array_transpose($array) { return call_user_func_array('array_map', array_merge(array(null), $array)); }
この関数は、パラメータとして 2 次元の連想配列も受け取り、転置後の新しい配列を返します。まず、array_merge 関数を使用して $array
配列を null 値とマージし、それを call_user_func_array 関数に渡します。この例では、array_map 関数がマージされた配列を処理します。 array_map 関数の最初のパラメーターは、各入力配列位置をどのように処理するかを指定するコールバック関数です。 null 値は、コールバック関数にパラメーター名がなく、デフォルト値を使用して入力配列を処理することを示します。この例では、コールバック関数は、$array を使用して列を作成し、すべての入力配列インデックス位置を行としてリストします。これは、このデータの動作を変換するのに非常に重要です。実際、この関数は各配列の最初の値を引数として受け入れ、それを配列自体に置き換えます。各キーは配列内に 1 回だけ出現するため、結果の配列には競合がないことが保証されます。
この関数を使用すると、上記の配列例を次のように転置できます。
$transposed = array_transpose($students);
この方法の利点は、効率的で、簡潔で、理解しやすいことであり、大規模な用途に適していることです。データと複雑な操作をスケールします。
概要
PHP で 2 次元連想配列の転置操作を実装するには、foreach ループを使用する方法と、array_map 関数と call_user_func_array 関数を使用する方法の 2 つがあります。どちらの方法にも独自の利点があり、どちらの方法を選択するかは、特定のアプリケーション シナリオによって異なります。小規模なデータ量の場合は foreach ループ メソッドを選択できますが、大規模なデータ量や複雑な操作の場合は、array_map 関数メソッドと call_user_func_array 関数メソッドを使用することをお勧めします。
以上がPHPで2次元オブジェクト配列を転置する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。