PHP における多次元配列と 1 次元配列の変換は、難しい操作ではありません。この目標は、いくつかの関数を正しく使用することで簡単に達成できます。この記事では、いくつかの実装方法を紹介します。
PHP では、配列は非常に便利で一般的に使用されるデータ型であり、実際の開発でもよく使用されます。 PHP 配列では、要素の保存と要素へのアクセスのための通常の操作を提供するだけでなく、多次元配列と 1 次元配列の使用も可能になり、それぞれ複雑な構造データといくつかの単純なデータを保存するために使用されます。
多次元配列とは、他の配列が配列内にネストされていることを意味します。つまり、配列要素も配列です。任意の次元を持つことができますが、各配列には論理的に一意のキーが必要です。たとえば、3 つのコースの成績を保存するために使用される多次元配列は、
$score = array( "math" => array( "Tom" => 89, "Jerry" => 92, "John" => 76 ), "english" => array( "Tom" => 78, "Jerry" => 85, "John" => 91 ), "science" => array( "Tom" => 95, "Jerry" => 84, "John" => 88 ) );
のように表すことができます。一方、一次元配列は、各要素に値が 1 つだけ含まれる配列を指し、この値は文字列、数値、ブール値などの 1 文字を使用できます。 1 次元配列のキーは文字列または数値にすることができますが、数値キーの値は整数または浮動小数点数にする必要があります。例:
$fruit = array("apple", "orange", "banana", "pear");
多次元配列を 1 次元配列に変換することは、非常に一般的な操作です。並べ替え、比較が必要な一部の操作では、 、多次元配列の要素の検索など。一般に、1 次元配列を使用する方が便利です。以下に、多次元配列を 1 次元配列に変換する 2 つの方法を紹介します。
再帰は、複雑な多次元配列の処理など、多くのタスクを簡単に処理できる非常に強力な方法です。再帰関数を使用して多次元配列を 1 次元配列に変換すると、配列のレベル数を徐々に減らし、最終的にはすべての要素を新しい 1 次元配列に移動できます。具体的な実装は次のとおりです:
function multi_to_one($multi_arr) { static $result_arr = array(); foreach ($multi_arr as $key => $val) { if (is_array($val)) { multi_to_one($val); } else { $result_arr[$key] = $val; } } return $result_arr; }
この関数では、各要素を走査します。現在の要素が配列であることが判明した場合、要素が配列でなくなるまで再帰操作を実行します。 ; それ以外の場合は、関数で定義された静的配列 $result_arr
に現在の要素を追加します。最後に、処理された 1 次元配列を返します。
この関数を使用して、上記の多次元配列 $score
を 1 次元配列に変換します:
$result = multi_to_one($score); print_r($result);
出力結果は次のとおりです:
Array ( [Tom] => 95 [Jerry] => 84 [John] => 88 )
PHP には、配列を走査するための関数 array_walk_recursive
があり、多次元配列内のすべての要素を走査できます。この関数は 2 番目の引数としてコールバック関数を受け取ることができ、要素を操作して新しい 1 次元配列に追加できます。具体的な実装は次のとおりです:
function flatten_array($multi_arr) { $result_arr = array(); array_walk_recursive($multi_arr, function($val, $key) use (&$result_arr) { $result_arr[$key] = $val; }); return $result_arr; }
最初のメソッドと比較すると、このメソッドは無名関数を使用してコールバック操作を完了します。この関数は use
キーワードを使用して外部変数を設定します$result_arr
が導入され、処理された要素がこの配列に格納されます。最後に、生成された 1 次元配列が返されます。
この関数を使用すると、上記の多次元配列 $score
を 1 次元配列に変換することもできます:
$result = flatten_array($score); print_r($result);
出力結果は次のとおりです:
Array ( [Tom] => 95 [Jerry] => 84 [John] => 88 )
1 次元配列から多次元配列への変換も非常に一般的な要件であり、実際のアプリケーションではよく発生します。 1 次元配列は特定の条件に従ってグループ化する必要があるということです。以下に、1次元配列を多次元配列に変換する方法を説明します。
array_reduce
は PHP の高階関数で、array_walk_recursive
のように配列を走査できますが、 array_walk_recursive
違いは、array_reduce
は関数の初期値としてパラメータを受け入れることもでき、この値が各コールバック関数の初期値となって渡されることです。 array_reduce
はさまざまな種類の計算や処理操作に使用でき、1 次元配列を多次元配列に変換するために使用できます。
次は具体的な実装です:
function group_array($data_arr, $group_key) { $result_arr = array_reduce($data_arr, function(&$result, $item) use ($group_key) { $index = $item[$group_key]; if (!isset($result[$index])) { $result[$index] = array(); } $result[$index][] = $item; return $result; }, array()); return $result_arr; }
この関数では、無名関数を使用してコールバック関数を実行します。配列を走査するとき、$group_key
現在の要素の新しい多次元配列に値を追加する前に、キーとして新しい配列要素を作成し、この新しい配列の値に現在の要素を追加します。プロセス全体を通じて、コールバック関数の最初のパラメータ $result
は、処理された多次元選択配列が最終的に返されるまで継続的に変更され、渡されます。
この関数を使用して、「group」キーに従って 1 次元配列
$data = array( array("id" => 1, "name" => "Tom", "group" => "A"), array("id" => 2, "name" => "Jerry", "group" => "A"), array("id" => 3, "name" => "John", "group" => "B"), array("id" => 4, "name" => "Smith", "group" => "C"), );
を多次元配列に変換します:
$result = group_array($data, "group"); print_r($result);
出力結果は次のとおりです。
Array ( [A] => Array ( [0] => Array ( [id] => 1 [name] => Tom [group] => A ) [1] => Array ( [id] => 2 [name] => Jerry [group] => A ) ) [B] => Array ( [0] => Array ( [id] => 3 [name] => John [group] => B ) ) [C] => Array ( [0] => Array ( [id] => 4 [name] => Smith [group] => C ) ) )
PHP での多次元配列と 1 次元配列の変換は、日常の開発でよく遭遇する要件です。再帰関数または高階関数を使用して、多次元配列を 1 次元配列に変換したり、1 次元配列を多次元配列に変換したりできます。実際のアプリケーションでは、さまざまな状況に応じてさまざまな方法を選択し、適切な関数を使用して変換を完了する必要があります。
以上がPHP で多次元配列を 1 次元配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。