Juste un additif.
Je sais que c'est vieux , mais je voulais ajouter une solution que je ne vois pas que j'ai trouvée moi-même. J'ai trouvé cette question alors que je cherchais une solution différente et je me suis simplement dit: "Eh bien, pendant que je suis ici."
Tout d'abord, la réponse de Neal est bonne et géniale à utiliser après avoir exécuté votre boucle, cependant, je préférerais faire tout le travail en même temps. Bien sûr, dans mon cas particulier, j'ai dû faire plus de travail que cet exemple simple ici, mais la méthode s'applique toujours. J'ai vu où quelques autres ont suggéré des foreachboucles, cependant, cela vous laisse toujours après le travail en raison de la nature de la bête. Normalement, je suggère des choses plus simples comme foreach, cependant, dans ce cas, il est préférable de se souvenir de la bonne for looplogique à l' ancienne . Utilisez simplement i! Pour conserver un index approprié, il suffit de soustraire iaprès chaque suppression d'un élément de tableau.
Voici mon exemple simple et fonctionnel :
$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--;
}
}
Sortira:
array(3) {
[0]=> int(3)
[1]=> int(4)
[2]=> int(5)
}
Cela peut avoir de nombreuses implémentations simples. Par exemple, mon cas exact nécessitait la tenue du dernier élément du tableau en fonction de valeurs multidimensionnelles. 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);
}
}
}
}
Sortira:
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 l'épissure car je cherche à supprimer l'élément précédent plutôt que le présent.