Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie ein mehrdimensionales Array in ein eindimensionales Array in PHP

So konvertieren Sie ein mehrdimensionales Array in ein eindimensionales Array in PHP

PHPz
PHPzOriginal
2023-04-27 09:07:33835Durchsuche

Das Konvertieren mehrdimensionaler Arrays und eindimensionaler Arrays in PHP ist kein schwieriger Vorgang. Dieses Ziel kann durch die korrekte Verwendung einiger Funktionen leicht erreicht werden.

Was sind mehrdimensionale Arrays und eindimensionale Arrays?

Arrays sind in PHP ein sehr nützlicher und häufig verwendeter Datentyp und werden häufig in der tatsächlichen Entwicklung verwendet. Neben der Bereitstellung regulärer Operationen zum Speichern und Zugreifen auf Elemente ermöglichen PHP-Arrays auch die Verwendung mehrdimensionaler und eindimensionaler Arrays, die zum Speichern komplexer Strukturdaten bzw. einiger einfacher Daten verwendet werden.

Mehrdimensionales Array bedeutet, dass andere Arrays innerhalb des Arrays verschachtelt sind, das heißt, die Array-Elemente sind ebenfalls ein Array. Sie können beliebige Dimensionen haben, aber jedes Array muss einen logisch eindeutigen Schlüssel haben. Beispielsweise kann ein mehrdimensionales Array, das zum Speichern der Noten von drei Kursen verwendet wird, wie folgt dargestellt werden:

$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
    )
);

, während sich ein eindimensionales Array auf ein Array bezieht, in dem jedes Element nur einen Wert enthält. Dieser Wert kann eine Zeichenfolge sein. eine Zahl und boolesche Werte usw. Die Schlüssel eines eindimensionalen Arrays können Zeichenfolgen oder Zahlen sein, die Werte numerischer Schlüssel müssen jedoch Ganzzahlen oder Gleitkommazahlen sein. Zum Beispiel:

$fruit = array("apple", "orange", "banana", "pear");

Mehrdimensionales Array in ein eindimensionales Array konvertieren

Das Konvertieren eines mehrdimensionalen Arrays in ein eindimensionales Array ist eine sehr häufige Operation für einige Vorgänge, bei denen Elemente sortiert, verglichen, gesucht usw. werden müssen Bei mehrdimensionalen Arrays ist die Verwendung eindimensionaler Arrays praktischer. Im Folgenden werden zwei Methoden zum Konvertieren mehrdimensionaler Arrays in eindimensionale Arrays vorgestellt.

Methode 1: Rekursive Funktionen verwenden

Rekursion ist eine sehr leistungsfähige Methode, mit der wir viele Aufgaben problemlos bewältigen können, einschließlich der Verarbeitung komplexer mehrdimensionaler Arrays. Durch die Verwendung einer rekursiven Funktion zum Konvertieren eines mehrdimensionalen Arrays in ein eindimensionales Array können Sie die Anzahl der Ebenen im Array schrittweise reduzieren und schließlich alle Elemente in ein neues eindimensionales Array verschieben. Die spezifische Implementierung ist wie folgt:

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;
}

In dieser Funktion durchlaufen wir jedes Element. Wenn wir feststellen, dass das aktuelle Element ein Array ist, führen wir eine rekursive Operation daran aus, bis das Element kein Array mehr ist Fügen Sie das aktuelle Element dem in der Funktion definierten statischen Array $result_arr hinzu. Schließlich geben wir das verarbeitete eindimensionale Array zurück. $result_arr 中。最后,我们返回这个处理好的一维数组。

使用这个函数可以将上文中的多维数组 $score 转换为一维数组:

$result = multi_to_one($score);
print_r($result);

输出结果为:

Array
(
    [Tom] => 95
    [Jerry] => 84
    [John] => 88
)

方法二:使用 array_walk_recursive 函数

PHP 中有一个专门用于遍历数组的函数 array_walk_recursive,它可以遍历多维数组中的每一个元素。这个函数可以接受一个回调函数作为第二个参数,我们可以在这个回调函数中操作元素并将它添加到新的一维数组中。下面是具体实现:

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 引入,并将处理好的元素存储在这个数组中。最后返回生成的一维数组。

使用这个函数也可以将上文的多维数组 $score 转换为一维数组:

$result = flatten_array($score);
print_r($result);

输出结果为:

Array
(
    [Tom] => 95
    [Jerry] => 84
    [John] => 88
)

一维数组转多维数组

将一维数组转换为多维数组也是一个非常常见的需求,在实际应用中经常遇到需要根据某些条件对一维数组进行分组的情况。以下介绍了一种将一维数组转为多维数组的方法。

方法:使用 array_reduce 函数

array_reduce 是 PHP 中的一个高阶函数,它可以像 array_walk_recursive 一样遍历数组,但是与 array_walk_recursive 不同的是, array_reduce 还可以接受一个参数作为函数的初始值,这个值会成为每个回调函数的初始值传递给它们。 array_reduce 可以被用于各种类型的计算和处理操作,我们可以通过它来将一维数组转换为多维数组。

下面是具体实现:

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

Verwenden Sie diese Funktion, um das mehrdimensionale Array $score oben in ein eindimensionales Array umzuwandeln:

$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"),
);
Das Ausgabeergebnis ist:

$result = group_array($data, "group");
print_r($result);
Methode 2: Verwenden Sie die Funktion array_walk_recursive

Es gibt eine Sonderfunktion in PHP Die Funktion array_walk_recursive wird zum Durchlaufen des Arrays verwendet. Sie kann jedes Element im mehrdimensionalen Array durchlaufen. Diese Funktion kann eine Callback-Funktion als zweiten Parameter akzeptieren, in der wir das Element manipulieren und zu einem neuen eindimensionalen Array hinzufügen können. Das Folgende ist die spezifische Implementierung:

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
                )

        )

)

Im Vergleich zur ersten Methode verwendet diese Methode eine anonyme Funktion, um den Rückrufvorgang abzuschließen. Diese Funktion verwendet das Schlüsselwort use, um die externe Variable $ festzulegen result_arr wird eingeführt und die verarbeiteten Elemente werden in diesem Array gespeichert. Abschließend wird das generierte eindimensionale Array zurückgegeben.

Mit dieser Funktion können Sie auch das obige mehrdimensionale Array $score in ein eindimensionales Array konvertieren: 🎜rrreee🎜Das Ausgabeergebnis ist: 🎜rrreee🎜Eindimensionales Array in multi konvertieren -dimensionales Array🎜🎜Eindimensionales Array konvertieren Die Konvertierung in ein mehrdimensionales Array ist ebenfalls eine sehr häufige Anforderung. In praktischen Anwendungen müssen eindimensionale Arrays nach bestimmten Bedingungen gruppiert werden. Im Folgenden wird eine Methode zum Konvertieren eines eindimensionalen Arrays in ein mehrdimensionales Array beschrieben. 🎜🎜Methode: Verwenden Sie die Funktion array_reduce 🎜🎜array_reduce ist eine Funktion höherer Ordnung in PHP, die das Array wie array_walk_recursive durchlaufen kann, jedoch mit array_walk_recursive code> > Der Unterschied besteht darin, dass <code>array_reduce auch einen Parameter als Anfangswert der Funktion akzeptieren kann und dieser Wert zum Anfangswert jeder Rückruffunktion wird und an diese übergeben wird. array_reduce kann für verschiedene Arten von Berechnungen und Verarbeitungsvorgängen verwendet werden, und wir können damit eindimensionale Arrays in mehrdimensionale Arrays konvertieren. 🎜🎜Das Folgende ist die spezifische Implementierung: 🎜rrreee🎜In dieser Funktion verwenden wir eine anonyme Funktion, um die Rückruffunktion beim Durchlaufen des Arrays auszuführen, wenn der $group_key-Wert des aktuellen Elements nicht vorhanden ist wurde zum neuen hinzugefügt In einem mehrdimensionalen Array erstellen wir ein neues Array-Element als Schlüssel und fügen dann das aktuelle Element zum Wert dieses neuen Arrays hinzu. Während des gesamten Prozesses wird der erste Parameter $result der Callback-Funktion kontinuierlich geändert und übergeben, bis schließlich ein verarbeitetes mehrdimensionales Auswahlarray zurückgegeben wird. 🎜🎜Verwenden Sie diese Funktion, um ein eindimensionales Array: 🎜rrreee🎜 in ein mehrdimensionales Array gemäß dem „Gruppen“-Schlüssel umzuwandeln: 🎜rrreee🎜Das Ausgabeergebnis ist: 🎜rrreee🎜Schlussfolgerung🎜🎜Die Konvertierung von mehrdimensionalen Arrays und eindimensionale Arrays in PHP sind unsere Anforderungen, denen wir in der täglichen Entwicklung häufig begegnen. Wir können rekursive Funktionen oder Funktionen höherer Ordnung verwenden, um mehrdimensionale Arrays in eindimensionale Arrays umzuwandeln oder eindimensionale Arrays in mehrdimensionale Arrays umzuwandeln. In praktischen Anwendungen müssen wir je nach Situation unterschiedliche Methoden auswählen und geeignete Funktionen verwenden, um die Konvertierung abzuschließen. 🎜

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie ein mehrdimensionales Array in ein eindimensionales Array in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn