Comment changer la longueur du tableau en php foreach

PHPz
Libérer: 2023-04-24 11:21:20
original
642 Les gens l'ont consulté

En PHP, un tableau est une structure de données très couramment utilisée qui peut stocker plusieurs éléments et effectuer diverses opérations. Dans de nombreux cas, nous devons utiliser une boucle pour parcourir un tableau et opérer sur ses éléments. PHP fournit une variété d'instructions de boucle, parmi lesquelles foreach est une instruction couramment utilisée.

Cependant, parfois, lorsque nous opérons sur des éléments d'un tableau dans une boucle foreach, cela peut entraîner une modification de la longueur du tableau, affectant ainsi le résultat de la boucle. Cet article présentera le problème de la modification de la longueur du tableau dans la boucle foreach et proposera quelques solutions.

1. Connaissance de base de la boucle foreach

En PHP, la boucle foreach est une instruction qui traverse un tableau. Sa syntaxe est la suivante :

foreach ($array as $value) {
    //对 $value 进行操作
}
Copier après la connexion

où $array représente le tableau qui doit être parcouru et $value représente. l'élément du tableau actuellement parcouru. Dans le corps de la boucle, diverses opérations peuvent être effectuées sur $value, telles que la sortie, la modification, etc.

2. Le problème de la modification de la longueur du tableau dans la boucle foreach

Lors de l'utilisation de la boucle foreach pour parcourir le tableau, si des opérations telles que l'ajout et la suppression d'éléments dans le tableau peuvent entraîner une modification de la longueur du tableau, affectant ainsi les résultats de la boucle. Regardons un exemple spécifique :

$array = [1, 2, 3, 4, 5];
foreach ($array as $value) {
    if ($value == 3) {
        array_splice($array, $value-1, 1);
    }
    echo $value . " ";
}
Copier après la connexion

Lors du parcours du tableau $array, le code ci-dessus utilise la fonction array_splice pour supprimer l'élément avec une valeur de 3 lorsqu'il est parcouru. Cependant, comme la longueur de $array change au cours de la boucle, le résultat n'est pas celui attendu.

Plus précisément, le résultat est :

1 2 4 5
Copier après la connexion

au lieu de ce à quoi nous nous attendions :

1 2 4
Copier après la connexion

En effet, après avoir supprimé l'élément de valeur 3, les éléments du tableau avanceront d'une position, et dans la boucle suivante In , le L'élément actuellement parcouru est l'élément d'index 3 (c'est-à-dire la valeur 4) du tableau d'origine. Cela entraînera l'omission d'un élément du tableau d'origine pendant le processus de parcours.

3. Solution

Pour les problèmes ci-dessus, il existe de nombreuses façons de les résoudre. Deux méthodes couramment utilisées sont présentées ci-dessous.

(1) Copier le tableau

Une solution consiste à copier le tableau d'origine avant de modifier le tableau, puis à effectuer des opérations de modification sur le nouveau tableau, et enfin à recopier le tableau modifié dans le tableau d'origine. Cela peut éviter le problème de la modification de la longueur du tableau d'origine.

$array = [1, 2, 3, 4, 5];
$new_array = $array;
foreach ($new_array as $key => $value) {
    if ($value == 3) {
        unset($new_array[$key]);
    }
}
$array = $new_array;
foreach ($array as $value) {
    echo $value . " ";
}
Copier après la connexion

Dans le code ci-dessus, le tableau $array est d'abord copié dans la nouvelle variable $new_array, et l'opération de suppression est effectuée sur le nouveau tableau. Copiez ensuite le $new_array modifié dans le tableau $array d'origine. De cette façon, vous obtenez les résultats corrects lors de la sortie des éléments du tableau.

(2) Utilisez la boucle d'ordre inverse

Une autre solution consiste à utiliser la boucle d'ordre inverse. Cette méthode peut éviter le problème du changement des indices lors de la modification du tableau.

$array = [1, 2, 3, 4, 5];
foreach (array_reverse($array) as $key => $value) {
    if ($value == 3) {
        unset($array[count($array) - $key - 1]);
    }
    echo $value . " ";
}
Copier après la connexion

Dans le code ci-dessus, la fonction array_reverse est utilisée pour inverser le tableau et les opérations de suppression sont effectuées sur le tableau inversé. Étant donné que l'indice après l'ordre inverse est exactement le contraire de l'indice du tableau d'origine, certaines transformations sont nécessaires lors de la suppression d'éléments.

En bref, que vous copiez le tableau ou que vous utilisiez une boucle d'ordre inverse, vous pouvez éviter le problème des changements de longueur du tableau dans la boucle foreach et garantir des résultats de parcours corrects.

4. Résumé

Lorsque vous utilisez la boucle foreach pour parcourir un tableau en PHP, vous devez faire attention au problème selon lequel l'ajout et la suppression d'éléments du tableau peuvent entraîner une modification de la longueur du tableau. Pour éviter de tels problèmes, des méthodes telles que la copie du tableau ou l'utilisation d'une boucle inverse peuvent être utilisées.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal