211 votes

Rebase les clés du tableau après désactivation d’éléments

J’ai un tableau :

Si j’étais pour vider le contenu du tableau, il ressemblerait à ceci :

Quand j’ai en boucle à travers et désactivé certaines clés, l’index obtient tous fait grimper.

Par la suite, si j’ai fait un autre dump maintenant il ressemblerait à :

Y a-t-il une bonne façon de réinitialiser le tableau donc c’éléments sont nuls basé à nouveau ??

480voto

Neal Points 68710

Essayez ceci :

À l’aide de la fonction array_values()

21voto

Web_Developer Points 106

Obtenu une autre méthode intéressante :

Maintenant, les touches $array sont remis à zéro.

15voto

Demian Brecht Points 11083

Utilisation plutôt que :

Travaillant échantillon ici.

6voto

SpYk3HH Points 10533

Juste un additif.

Je sais que c'est vieux, mais je voulais ajouter une solution, je ne vois pas ce que je suis venu avec moi-même. Trouve cette question alors que sur la chasse d'une solution différente et juste pensé: "eh Bien, pendant que je suis ici."

Tout d'abord, Neal's réponse est bonne et idéal pour une utilisation après l'exécution de la boucle, cependant, je préfère faire tout le travail à la fois. Bien sûr, dans mon cas précis, j'ai eu à faire plus de travail que ce simple exemple ici, mais la méthode s'applique toujours. J'ai vu où un couple d'autres ont suggéré foreach boucles, cependant, cela reste encore à vous après le travail, en raison de la nature de la bête. Normalement, je suggère les choses les plus simples comme foreach, cependant, dans ce cas, il est préférable de se rappeler le bon vieux façonné for loop logique. Simplement utiliser i! Pour maintenir l'indice approprié, juste soustraire i après chaque suppression d'un élément de Tableau.

Voici mon simple, travail exemple:

$array = array(1,2,3,4,5);

for ($i = 0; $i < count($array); $i++) {
    if($array[$i] == 1 || $array[$i] == 2) {
        array_splice($array, $i, 1);
        $i--;
    }
}

Sortie:

array(3) {
    [0]=> int(3)
    [1]=> int(4)
    [2]=> int(5)
}

Cela peut avoir de nombreuses implémentations simples. Par exemple, mon cas exact de détention obligatoire du dernier élément de matrice multidimensionnelle basée sur les valeurs. Je vais vous montrer ce que je veux dire:

$files = array(
    array(
        'name' => 'example.zip',
        'size' => '100000000',
        'type' => 'application/x-zip-compressed',
        'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
        'deleteUrl' => 'server/php/?file=example.zip',
        'deleteType' => 'DELETE'
    ),
    array(
        'name' => 'example.zip',
        'size' => '10726556',
        'type' => 'application/x-zip-compressed',
        'url' => '28188b90db990f5c5f75eb960a643b96/example.zip',
        'deleteUrl' => 'server/php/?file=example.zip',
        'deleteType' => 'DELETE'
    ),
    array(
        'name' => 'example.zip',
        'size' => '110726556',
        'type' => 'application/x-zip-compressed',
        'deleteUrl' => 'server/php/?file=example.zip',
        'deleteType' => 'DELETE'
    ),
    array(
        'name' => 'example2.zip',
        'size' => '12356556',
        'type' => 'application/x-zip-compressed',
        'url' => '28188b90db990f5c5f75eb960a643b96/example2.zip',
        'deleteUrl' => 'server/php/?file=example2.zip',
        'deleteType' => 'DELETE'
    )
);

for ($i = 0; $i < count($files); $i++) {
    if ($i > 0) {
        if (is_array($files[$i-1])) {
            if (!key_exists('name', array_diff($files[$i], $files[$i-1]))) {
                if (!key_exists('url', $files[$i]) && key_exists('url', $files[$i-1])) $files[$i]['url'] = $files[$i-1]['url'];
                $i--;
                array_splice($files, $i, 1);
            }
        }
    }
}

Sortie:

array(1) {
    [0]=> array(6) {
            ["name"]=> string(11) "example.zip"
            ["size"]=> string(9) "110726556"
            ["type"]=> string(28) "application/x-zip-compressed"
            ["deleteUrl"]=> string(28) "server/php/?file=example.zip"
            ["deleteType"]=> string(6) "DELETE"
            ["url"]=> string(44) "28188b90db990f5c5f75eb960a643b96/example.zip"
        }
    [1]=> array(6) {
            ["name"]=> string(11) "example2.zip"
            ["size"]=> string(9) "12356556"
            ["type"]=> string(28) "application/x-zip-compressed"
            ["deleteUrl"]=> string(28) "server/php/?file=example2.zip"
            ["deleteType"]=> string(6) "DELETE"
            ["url"]=> string(45) "28188b90db990f5c5f75eb960a643b96/example2.zip"
        }
}

Comme vous le voyez, je manipule $i avant de la jonction, comme je suis à la recherche de supprimer le précédent, plutôt que le présent article.

1voto

upful Points 103

Ou vous pouvez faire votre propre fonction qui passe du tableau par référence.

Alors tout ce que vous avez à faire est...

... et maintenant votre êtes sans les valeurs vous placé dans et les clés sont remis à zéro

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X