Maison > Article > développement back-end > Comment convertir un tableau multidimensionnel en tableau unidimensionnel en PHP
La conversion de tableaux multidimensionnels et de tableaux unidimensionnels en PHP n'est pas une opération difficile. Cet objectif peut être facilement atteint en utilisant correctement certaines fonctions.
En PHP, les tableaux sont un type de données très utile et couramment utilisé, et sont souvent utilisés dans le développement réel. En plus de fournir des opérations régulières de stockage et d'accès aux éléments, les tableaux PHP permettent également l'utilisation de tableaux multidimensionnels et de tableaux unidimensionnels, qui sont utilisés respectivement pour stocker des données structurelles complexes et certaines données simples.
Un tableau multidimensionnel signifie que d'autres tableaux sont imbriqués à l'intérieur du tableau, c'est-à-dire que les éléments du tableau sont également un tableau. Ils peuvent avoir n'importe quelle dimension, mais chaque tableau doit avoir une clé logiquement unique. Par exemple, un tableau multidimensionnel utilisé pour stocker les notes de trois cours peut être représenté comme :
$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 ) );
tandis qu'un tableau unidimensionnel fait référence à un tableau dans lequel chaque élément ne contient qu'une seule valeur. la valeur peut être une chaîne, un nombre, un booléen, etc. Les clés d'un tableau unidimensionnel peuvent être des chaînes ou des nombres, mais les valeurs des clés numériques doivent être des nombres entiers ou des nombres à virgule flottante. Par exemple :
$fruit = array("apple", "orange", "banana", "pear");
Tableau multidimensionnel vers tableau unidimensionnel est une opération très courante, pour certains éléments qui doivent être trié et comparé Pour des opérations telles que , recherche, etc., l'utilisation de tableaux unidimensionnels sera plus pratique. Ce qui suit présente deux méthodes de conversion de tableaux multidimensionnels en tableaux unidimensionnels.
La récursion est une méthode très puissante qui nous permet de gérer facilement de nombreuses tâches, notamment le traitement de tableaux multidimensionnels complexes. En utilisant une fonction récursive pour convertir un tableau multidimensionnel en un tableau unidimensionnel, vous pouvez progressivement réduire le nombre de niveaux du tableau et éventuellement déplacer tous les éléments dans un nouveau tableau unidimensionnel. L'implémentation spécifique est la suivante :
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; }
Dans cette fonction, nous parcourons chaque élément si nous constatons que l'élément actuel est un tableau, alors nous effectuons une opération récursive dessus jusqu'à ce que l'élément ne soit pas. plus un tableau ; Sinon, nous ajoutons l'élément courant au tableau statique $result_arr
défini dans la fonction. Enfin, nous renvoyons le tableau unidimensionnel traité. $result_arr
中。最后,我们返回这个处理好的一维数组。
使用这个函数可以将上文中的多维数组 $score
转换为一维数组:
$result = multi_to_one($score); print_r($result);
输出结果为:
Array ( [Tom] => 95 [Jerry] => 84 [John] => 88 )
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
是 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
$score
ci-dessus en un tableau unidimensionnel :
$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"), );Le résultat de sortie est : #🎜🎜 #
$result = group_array($data, "group"); print_r($result);
Méthode 2 : Utiliser la fonction array_walk_recursive
Il existe une fonction array_walk_recursive
spécifiquement utilisée pour parcourir des tableaux en PHP, qui peut parcourir chaque élément dans un environnement multidimensionnel tableau. Cette fonction peut accepter une fonction de rappel comme deuxième paramètre, dans laquelle nous pouvons manipuler l'élément et l'ajouter à un nouveau tableau unidimensionnel. Voici l'implémentation spécifique :
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 ) ) )
use
pour ajouter un externe. La variable $result_arr
est introduite et les éléments traités sont stockés dans ce tableau. Enfin, le tableau unidimensionnel généré est renvoyé. En utilisant cette fonction, vous pouvez également convertir le tableau multidimensionnel ci-dessus $score
en un tableau unidimensionnel :
array_reduce
est une fonction d'ordre supérieur en PHP, elle peut ressembler à array_walk_recursive
Parcourez le tableau, mais contrairement à array_walk_recursive
, array_reduce
peut également accepter un paramètre comme valeur initiale de la fonction, et cette valeur deviendra la valeur initiale de chaque fonction de rappel passée à eux . array_reduce
peut être utilisé pour différents types de calculs et d'opérations de traitement, et nous pouvons l'utiliser pour convertir des tableaux unidimensionnels en tableaux multidimensionnels. #🎜🎜##🎜🎜#Ce qui suit est l'implémentation spécifique : #🎜🎜#rrreee#🎜🎜#Dans cette fonction, nous utilisons une fonction anonyme pour exécuter la fonction de rappel lors de la traversée du tableau, si le $. de l'élément actuel La valeur group_key
n'a pas encore été ajoutée au nouveau tableau multidimensionnel, nous créons un nouvel élément de tableau comme clé, puis ajoutons l'élément actuel à la valeur de ce nouveau tableau. Pendant tout le processus, le premier paramètre $result
de la fonction de rappel sera continuellement modifié et transmis jusqu'à ce qu'un tableau de sélection multidimensionnel traité soit finalement renvoyé. #🎜🎜##🎜🎜#Utilisez cette fonction pour convertir un tableau unidimensionnel : #🎜🎜#rrreee#🎜🎜# selon la touche "groupe" en un tableau multidimensionnel : #🎜🎜#rrreee#🎜🎜 #Le résultat de sortie est : #🎜🎜#rrreee#🎜🎜#Conclusion#🎜🎜##🎜🎜#La conversion de tableaux multidimensionnels et de tableaux unidimensionnels en PHP est une exigence que nous rencontrons souvent dans le développement quotidien. Nous pouvons utiliser des fonctions récursives ou des fonctions d'ordre supérieur pour convertir des tableaux multidimensionnels en tableaux unidimensionnels ou convertir des tableaux unidimensionnels en tableaux multidimensionnels. Dans les applications pratiques, nous devons choisir différentes méthodes en fonction de différentes situations et utiliser les fonctions appropriées pour terminer la conversion. #🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!