In PHP ist Array einer der häufigsten Datentypen. Durch Arrays können Sie einen Datensatz auf eine bestimmte Weise kombinieren, um den Datenbetrieb und die Datenverwaltung zu erleichtern. Die Dimensionen eines Arrays sind für uns eine Möglichkeit, Arrays zu klassifizieren und zu beschreiben.
In PHP werden die Dimensionen eines Arrays basierend auf der verschachtelten Struktur von Array-Elementen beschrieben. Wenn ein Array nur ein einzelnes Element enthält, ist die Dimension des Arrays 1, zum Beispiel:
$arr = array(1, 2, 3, 4); echo count($arr); // 输出 4
Das obige Array enthält nur ein einzelnes Element, daher ist seine Dimension 1 und die Länge des Arrays ist 4.
Wenn ein Array andere Array-Elemente enthält, wird die Dimension des Arrays zur Anzahl der Ebenen, die das verschachtelte Array enthalten. Zum Beispiel:
$arr2 = array( 1, array( 2, array(3, 4), 5 ), 6, array(7, 8) ); echo count($arr2); // 输出 4
Das obige Array enthält zwei verschachtelte Arrays, sodass seine Dimension 2 und die Länge des Arrays 4 beträgt.
Wie bestimmt man also die Abmessungen eines Arrays? Hier sind mehrere Methoden:
Rekursion ist eine in der Informatik weit verbreitete Idee, mit der mehrstufige verschachtelte Daten verarbeitet werden können. Wir können Rekursion verwenden, um die Dimension des Arrays zu bestimmen. Der Code lautet wie folgt:
// 递归计算数组维度 function getDimension($arr) { if (!is_array($arr)) { return 0; } else { $max = 0; foreach ($arr as $subArr) { $subArrDimension = getDimension($subArr); if ($subArrDimension > $max) { $max = $subArrDimension; } } return $max + 1; } }
Die obige Funktion getDimension($arr)
kann jedes Array akzeptieren und die Dimension des Arrays rekursiv berechnen. Unter anderem wird is_array($arr)
verwendet, um zu bestimmen, ob das Element ein Array-Typ ist. Wenn es sich nicht um einen Array-Typ handelt, wird 0 zurückgegeben, was angibt, dass die Dimension des Elements 0 ist. Wenn es sich um einen Array-Typ handelt, iterieren Sie über die Array-Elemente, berechnen jedes Mal rekursiv die Abmessungen seiner Unterarrays und geben schließlich die größte Dimension im Unterarray zurück. getDimension($arr)
可以接受任意一个数组,并通过递归的方式计算数组的维度。其中 is_array($arr)
用于判断该元素是否为数组类型,如果不是数组类型,则返回 0,表示该元素的维度为 0。 如果它是一个数组类型,则遍历该数组元素,每次递归计算它的子数组的维度,最终返回子数组中最大的维度。
实际上,我们也可以通过嵌套的 foreach 循环来判断数组的维度。如果一个数组的所有元素都不是数组类型,那它的维度为 1;如果它包含了数组类型的元素,则它的维度等于其中最内层子数组的维度加 1。代码如下:
// 使用 foreach 嵌套计算维度 function getDimension2($arr) { if (!is_array($arr)) { return 0; } else { $depth = 1; foreach ($arr as $subArr) { if (is_array($subArr)) { $subArrDepth = getDimension2($subArr) + 1; if ($subArrDepth > $depth) { $depth = $subArrDepth; } } } return $depth; } }
上述代码定义了函数 getDimension2($arr)
,它的计算方式与 getDimension($arr)
相同,只是使用了嵌套的 foreach 循环。其中,如果一个元素不是数组类型,则直接返回 0;如果它是数组类型,则遍历每一个元素,计算出最内层子数组的维度,然后将其加 1 即可。
PHP 内置函数 array_filter()
可以用于过滤数组中不符合条件的元素,并根据过滤结果返回一个新的数组。我们可以利用它来判断数组的维度。代码如下:
// 使用 array_filter 函数计算维度 function getDimension3($arr) { if (!is_array($arr)) { return 0; } else { $child = current($arr); $notEmpty = array_filter($arr); if (count($notEmpty) == 0) { return 1; } else { return is_array($child) ? getDimension3($child) + 1 : 1; } } }
上述代码定义了函数 getDimension3($arr)
,它利用了 array_filter()
函数。其中,使用 current($arr)
取出数组中的第一个元素,判断该元素是否为数组类型。如果它不是数组类型,则说明该数组的维度为 1;如果它是数组类型,则使用 array_filter($arr)
把该数组中所有的空元素过滤掉,并根据返回的新数组的长度来判断该数组的维度。
还有一种简单的方法是通过字符串长度的变化来判断数组的维度,这里我们使用 str_repeat 函数。具体实现如下:
// 使用 str_repeat 函数计算维度 function getDimension4($arr) { $temp = $arr; $i = 0; while (is_array($temp)) { $temp = current($temp); $i++; $str = str_repeat('.', $i); echo '<pre class="brush:php;toolbar:false">'.$str.implode($str, $temp).''; } return $i; }
上述代码定义了函数 getDimension4($arr)
,它利用了 PHP 中的 current()
函数和 str_repeat()
getDimension2($arr)
, ihre Berechnungsmethode ist die gleiche wie getDimension($arr)
, verwendet jedoch verschachtelt für jeden Zyklus. Wenn ein Element kein Array-Typ ist, wird 0 direkt zurückgegeben. Wenn es sich um einen Array-Typ handelt, wird jedes Element durchlaufen, die Dimension des innersten Subarrays berechnet und dann 1 hinzugefügt. 🎜🎜3. Verwenden Sie die Funktion array_filter, um die Abmessungen des Arrays zu bestimmen. 🎜🎜Die in PHP integrierte Funktion array_filter()
kann verwendet werden, um Elemente im Array zu filtern, die die Bedingungen nicht erfüllen, und a zurückzugeben neues Array basierend auf den Filterergebnissen. Damit können wir die Abmessungen des Arrays bestimmen. Der Code lautet wie folgt: 🎜rrreee🎜Der obige Code definiert die Funktion getDimension3($arr)
, die die Funktion array_filter()
verwendet. Verwenden Sie unter anderem current($arr)
, um das erste Element im Array herauszunehmen und zu bestimmen, ob das Element vom Array-Typ ist. Wenn es sich nicht um einen Array-Typ handelt, bedeutet dies, dass die Dimension des Arrays 1 ist; wenn es sich um einen Array-Typ handelt, verwenden Sie array_filter($arr)
, um alle leeren Elemente im Array herauszufiltern Basierend auf der zurückgegebenen Länge des neuen Arrays werden die Abmessungen des Arrays bestimmt. 🎜🎜4. Verwenden Sie die Funktion str_repeat, um die Dimension des Arrays zu bestimmen. 🎜🎜Eine weitere einfache Methode besteht darin, die Dimension des Arrays durch die Änderung der Stringlänge zu bestimmen. Die spezifische Implementierung ist wie folgt: 🎜rrreee🎜Der obige Code definiert die Funktion getDimension4($arr)
, die die Funktion current()
und str_repeat() verwendet Funktion. Verwenden Sie eine While-Schleife innerhalb der Funktion, um die verschachtelten Unterarrays im Array kontinuierlich zu durchlaufen, bei jedem Durchlauf eine Zeichenfolge mit Abstand auszugeben und schließlich den Wert von i zurückzugeben. 🎜🎜Die oben genannten Möglichkeiten sind mehrere Möglichkeiten, die Dimensionen eines Arrays zu bestimmen, wobei Rekursion und Foreach-Implementierungsmethoden am häufigsten verwendet werden. Entwickler können je nach tatsächlicher Situation verschiedene Methoden zur Implementierung verwenden. 🎜
Das obige ist der detaillierte Inhalt vonSo ermitteln Sie die Abmessungen eines Arrays in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!