PHP プログラミングでは配列をよく使用しますが、多次元配列も非常に一般的なデータ型です。特に複雑な構造化データを扱う場合、多次元配列を使用するとデータをより明確に整理できます。ただし、場合によっては、多次元配列を 1 次元配列に変換する必要があるため、これは非常に便利です。この記事では、PHPで多次元配列を1次元配列に変換する方法を紹介します。
1. 多次元配列とは何ですか?
PHP では、配列は複数の次元を持つことができます。 1 次元配列はリストと同等で、各要素には添え字があり、対応する値は添え字を通じて取得できます。多次元配列は、配列を使用してテーブルまたは行列に似た構造を表現します。各要素は配列または別の多次元配列になります。
たとえば、次の 2 次元配列は学生情報テーブルを表します:
$students = array( array("name" => "张三", "age" => 18, "score" => array(90, 85, 94)), array("name" => "李四", "age" => 22, "score" => array(80, 88, 90)), array("name" => "王五", "age" => 20, "score" => array(92, 95, 90)) );
この配列には 3 つの要素があり、各要素は 3 つのキーと値のペアを含む 1 次元配列です。 「名前」、「年齢」、「スコア」をキーとする配列。 「スコア」に対応する値は、3 つの試験のスコアを表す 3 つの要素を含む 1 次元配列です。
2. なぜ多次元配列を 1 次元配列に変換する必要があるのでしょうか?
多次元配列は複雑なデータを表現する場合に便利ですが、場合によっては 1 次元配列に変換する必要があるため、データの操作や処理が容易になります。
たとえば、上記の学生情報テーブルを単純なテーブルに出力する必要がある場合、各学生の情報を 1 行に展開する必要があります。
| 姓名 | 年龄 | 成绩1 | 成绩2 | 成绩3 | | 张三 | 18 | 90 | 85 | 94 | | 李四 | 22 | 80 | 88 | 90 | | 王五 | 20 | 92 | 95 | 90 |
このとき、次のようにする必要があります。多次元配列の変換 1 次元配列に展開します。各行は 1 次元配列に対応します。
3. 多次元配列を 1 次元配列に変換するにはどうすればよいですか?
PHP では、多次元配列を 1 ビット配列に変換することは難しくなく、再帰関数によって実現できます。
これは、任意の次元の配列を 1 次元配列にフラット化できるサンプル コードです:
function flatten($arr){ $result = array(); foreach($arr as $value){ if(is_array($value)){ $result = array_merge($result, flatten($value)); }else{ $result[] = $value; } } return $result; }
この関数の動作は単純です。要素が配列の場合、それ自体を呼び出します。それ以外の場合は、要素は結果の配列に追加されます。この関数を呼び出すことで、多次元配列を 1 次元配列に変換できます。たとえば、次のようになります。
$students = array( array("name" => "张三", "age" => 18, "score" => array(90, 85, 94)), array("name" => "李四", "age" => 22, "score" => array(80, 88, 90)), array("name" => "王五", "age" => 20, "score" => array(92, 95, 90)) ); $result = flatten($students); print_r($result);
出力結果は次のとおりです。
Array ( [0] => 张三 [1] => 18 [2] => 90 [3] => 85 [4] => 94 [5] => 李四 [6] => 22 [7] => 80 [8] => 88 [9] => 90 [10] => 王五 [11] => 20 [12] => 92 [13] => 95 [14] => 90 )
ご覧のとおり、元の 2 次元配列は、次元配列は、15 要素からなる 1 次元配列にフラット化されました。
4. 発生した問題と解決策
多次元配列を変換するときに、いくつかの問題が発生する可能性があります。以下に、考えられる問題とそれに対応する解決策をいくつか示します。
前の例では、配列のキーを無視して、配列内の値を 1 次元配列に拡張しただけです。キーを保持する必要がある場合は、次のコードを使用できます:
function flatten2($arr){ $result = array(); foreach($arr as $key => $value){ if(is_array($value)){ $result = array_merge($result, flatten2($value)); }else{ $result[$key] = $value; } } return $result; }
この関数と前の関数の唯一の違いは、要素が配列でない場合、値とキーの両方が追加されることです。結果の配列に。
多次元配列の各要素が連想配列である場合、各要素が連想配列となる 1 次元配列に拡張できます。たとえば、この配列
$students = array( array( "name" => "张三", "age" => 18, "score" => array("语文" => 90, "数学" => 85, "英语" => 94) ), array( "name" => "李四", "age" => 22, "score" => array("语文" => 80, "数学" => 88, "英语" => 90) ), array( "name" => "王五", "age" => 20, "score" => array("语文" => 92, "数学" => 95, "英语" => 90) ) );
を 15 要素を含む 1 次元配列に拡張するには、次のコードを使用できます。
function flatten3($arr){ $result = array(); foreach($arr as $key => $value){ if(is_array($value)){ if(!empty($value)){ foreach($value as $sub_key => $sub_value){ $result[$key . "_" . $sub_key] = $sub_value; } }else{ $result[$key] = ""; } }else{ $result[$key] = $value; } } return $result; }
この関数のロジックは前の関数と似ています。 、唯一の違い 要素が連想配列の場合、キーと値は連結され、新しいキーとして結果配列に格納されます。
上記の例では、元の配列に null または空の配列が含まれている場合、それらは処理する必要のある配列の要素ではないため、フラット化後に無視されます。これらの要素を保持したい場合は、if ステートメントに直接判断を追加できます。
function flatten4($arr){ $result = array(); foreach($arr as $key => $value){ if(is_array($value)){ if(!empty($value)){ foreach($value as $sub_key => $sub_value){ $result[$key . "_" . $sub_key] = $sub_value; } }else{ $result[$key] = array(); } }else{ $result[$key] = $value; if(is_null($value)){ $result[$key] = null; } } } return $result; }
この関数と前の関数の唯一の違いは、要素が null または空の配列の場合、対応するキー値は結果配列に直接追加されます。
5. 概要
多次元配列を 1 次元配列に変換することは、PHP プログラミングでは非常に一般的であり、これによりデータをより便利に処理および操作できるようになります。再帰関数を使用すると、任意の次元の配列を 1 次元の配列に簡単にフラット化できます。実際には、多次元配列の構造が異なるため、特別な処理を必要とするいくつかの特殊なケースが発生する可能性があります。ただし、一般に、このプロセスは難しくありません。再帰関数の使用に慣れていれば十分です。
以上がPHPで多次元配列を1次元配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。