En PHP, vous pouvez utiliser la fonction array_flip() pour échanger des valeurs clés de tableau unidimensionnel, et pour les tableaux multidimensionnels, vous avez le choix entre plusieurs stratégies. Les stratégies récursives conviennent au traitement de tableaux multidimensionnels imbriqués, mais la récursivité peut provoquer un débordement de la pile de fonctions. La stratégie itérative évite ce problème, mais est moins efficace pour les tableaux plus imbriqués. En fonction de la taille et de la structure du tableau, choisissez une stratégie récursive ou itérative pour obtenir de meilleures performances.
Échange clé-valeur de tableau PHP : stratégies et comparaison des performances de l'échange clé-valeur de tableau multidimensionnel
En PHP, il est parfois nécessaire d'échanger les clés et les valeurs du tableau. Pour les tableaux unidimensionnels, c'est simple, utilisez simplement la fonction array_flip()
. Cependant, pour les tableaux multidimensionnels, la situation devient compliquée.
Comparaison des stratégies et des performances
Il existe différentes stratégies qui peuvent être utilisées pour échanger les valeurs clés des tableaux multidimensionnels, et chaque stratégie a ses avantages et ses inconvénients. Voici les deux stratégies les plus couramment utilisées :
1. Utiliser la récursion
function flipArrayRecursive(array $array) { if (!is_array($array)) { return $array; } $flippedArray = []; foreach ($array as $key => $value) { $flippedArray[$value] = flipArrayRecursive($key); } return $flippedArray; }
Avantages : Les stratégies récursives sont très efficaces lorsqu'il s'agit de tableaux multidimensionnels imbriqués.
Inconvénients : La récursion peut provoquer un débordement de la pile de fonctions, en particulier lorsqu'il s'agit de très grands tableaux.
2. Utiliser l'itération
function flipArrayIterative(array $array) { $flippedArray = []; $queue = new SplQueue(); $queue->enqueue([$array, null]); while (!$queue->isEmpty()) { list($currentArray, $parentKey) = $queue->dequeue(); foreach ($currentArray as $key => $value) { if (is_array($value)) { $queue->enqueue([$value, $key]); } else { $flippedArray[$value] = $parentKey === null ? $key : "$parentKey.$key"; } } } return $flippedArray; }
Avantages : La stratégie d'itération évite les problèmes de débordement de pile de fonctions et fonctionne bien même pour les tableaux plus grands.
Inconvénients : Lorsqu'il s'agit de tableaux multidimensionnels imbriqués, la stratégie d'itération peut ralentir à mesure que la profondeur du tableau augmente.
Cas pratique
Considérons un scénario : vous devez convertir un tableau bidimensionnel contenant des paires clé-valeur en un tableau bidimensionnel contenant des paires valeur-clé.
Tableau d'origine :
$array = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => ['key3-1' => 'value3-1', 'key3-2' => 'value3-2'] ];
Utilisez une stratégie récursive pour obtenir le tableau échangé :
$flippedArray = flipArrayRecursive($array);
Sortie :
Array ( [value1] => key1 [value2] => key2 [value3-1] => key3.key3-1 [value3-2] => key3.key3-2 )
Utilisez une stratégie itérative pour obtenir le tableau échangé :
$flippedArray = flipArrayIterative($array);
Sortie :
Array ( [value1] => key1 [value2] => key2 [value3-1] => key3.key3-1 [value3-2] => key3.key3-2 )
Quelle stratégie choisir ?
Le choix de la meilleure stratégie dépend de la taille et de la structure du tableau. Pour les tableaux plus petits ou moins imbriqués, une stratégie récursive peut être plus efficace. Pour les tableaux plus grands ou les tableaux plus imbriqués, une stratégie itérative est plus appropriée.
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!