ホームページ  >  記事  >  バックエンド開発  >  PHPで2次元オブジェクト配列を転置する方法

PHPで2次元オブジェクト配列を転置する方法

PHPz
PHPzオリジナル
2023-04-19 14:11:36525ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。