ホームページ > バックエンド開発 > PHPの問題 > PHPで多次元配列を1次元配列に変換する方法

PHPで多次元配列を1次元配列に変換する方法

PHPz
リリース: 2023-04-19 11:23:57
オリジナル
879 人が閲覧しました

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. 配列キーをどう扱うか?

前の例では、配列のキーを無視して、配列内の値を 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. 多次元連想配列をどのように扱うか?

多次元配列の各要素が連想配列である場合、各要素が連想配列となる 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;
}
ログイン後にコピー

この関数のロジックは前の関数と似ています。 、唯一の違い 要素が連想配列の場合、キーと値は連結され、新しいキーとして結果配列に格納されます。

  1. null 配列と空の配列を含む配列を処理するにはどうすればよいですか?

上記の例では、元の配列に 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート