J'ai une boucle foreach configurée pour parcourir mon tableau, rechercher un certain lien et, le cas échéant, supprimer ce lien du tableau.
Mon code:
foreach($images as $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif' ||
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$image]);
}
}
Mais cela ne supprime pas le tableau entires. C'est probablement quelque chose à voir avec $images[$image]
, car ce n'est pas la clé de l'entrée du tableau, seulement le contenu? Y a-t-il un moyen de faire cela sans incorporer de compteur?
Merci.
EDIT: Merci les gars, mais maintenant j'ai un autre problème où les entrées du tableau ne sont pas effacées.
Mon nouveau code:
foreach($images[1] as $key => $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif')
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$key]);
}
}
$ images est actuellement un tableau à deux dimensions, d’où la raison pour laquelle j'ai besoin de $ images [1]. J'ai vérifié et cela contournait avec succès les éléments du tableau, et certains éléments contiennent certaines de ces URL que je souhaite supprimer, mais ils ne sont pas supprimés. C'est mon $images
tableau:
Array
(
[0] => Array
(
[0] => useless
[1] => useless
[2] => useless
[3] => useless
[4] => useless
)
[1] => Array
(
[0] => http://i27.tinypic.com/29yk345.gif
[1] => http://img3.abload.de/img/10nx2340fhco.gif
[2] => http://img3.abload.de/img/10nx2340fhco.gif
[3] => http://i42.tinypic.com/9pp2456x.gif
)
)
Merci!
foreach($images as $key => $image)
{
if(in_array($image, array(
'http://i27.tinypic.com/29ykt1f.gif',
'http://img3.abload.de/img/10nxjl0fhco.gif',
'http://i42.tinypic.com/9pp2tx.gif',
))
{
unset($images[$key]);
}
}
Essayez ça:
foreach ($images as $key => &$image) {
if (yourConditionGoesHere) {
unset($images[$key])
}
}
Normalement, foreach utilise une copie de votre tableau pour que les modifications que vous apportez y soient apportées et n’affectent pas le tableau.
Vous devez donc supprimer les valeurs via $ images [$ key];
La référence sur & $ image empêche la boucle de créer une copie du tableau qui gaspillerait de la mémoire.
Pour répondre à la question initiale (après votre modification), vous devez désélectionner ($ images [1] [$ key]);
Maintenant quelques informations supplémentaires sur le fonctionnement de PHP): vous pouvez supprimer en toute sécurité des éléments du tableau dans une boucle foreach, que le fait d'avoir ou non l'élément de tableau n'a pas d'importance. Voir ce code:
$a=[1,2,3,4,5];
foreach($a as $key=>$val)
{
if ($key==3) unset($a[$key]);
}
print_r($a);
Cela imprime:
Array
(
[0] => 1
[1] => 2
[2] => 3
[4] => 5
)
Comme vous pouvez le constater, si vous ne définissez pas la bonne chose dans la boucle foreach, tout fonctionne correctement.
Vous pouvez utiliser l'index de l'élément de tableau pour le supprimer du tableau, la prochaine fois que vous utiliserez le $list
variable, vous verrez que le tableau est modifié.
Essayez quelque chose comme ça
foreach($list as $itemIndex => &$item) {
if($item['status'] === false) {
unset($list[itemIndex]);
}
}
$image
Est dans votre cas la valeur de l'élément et non la clé. Utilisez également la syntaxe suivante pour obtenir la clé:
foreach ($images as $key => $value) {
/* … */
}
Vous pouvez maintenant supprimer l'élément avec unset($images[$key])
.
Vous auriez aussi besoin d'un
$i--;
après chaque unset de ne pas sauter un élément /
Parce que quand tu désinstalles $item[45]
, le prochain élément de la boucle for devrait être $item[45]
- ce qui était [46]
avant de décrocher. Si vous ne le faites pas, vous sauterez toujours un élément après la réinitialisation.
foreach($images as $key=>$image)
{
if($image == 'http://i27.tinypic.com/29ykt1f.gif' ||
$image == 'http://img3.abload.de/img/10nxjl0fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2tx.gif')
{ unset($images[$key]); }
}
!! foreach ($ images en tant que $ key => $ image
cause $ image est la valeur, donc $ images [$ image] n'a aucun sens.
Une solution consisterait à utiliser la clé de vos éléments pour les supprimer. Vous pouvez à la fois les clés et les valeurs lors de la boucle avec foreach .
Par exemple :
$arr = array(
'a' => 123,
'b' => 456,
'c' => 789,
);
foreach ($arr as $key => $item) {
if ($item == 456) {
unset($arr[$key]);
}
}
var_dump($arr);
Vous donnera ce tableau, à la fin:
array
'a' => int 123
'c' => int 789
Ce qui signifie que, dans votre cas, une telle chose devrait faire l'affaire:
foreach($images as $key => $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif' ||
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$key]);
}
}
Désolé pour la réponse tardive, j'ai récemment eu le même problème avec PHP et ai découvert que lorsque vous travaillez avec des tableaux qui n'utilisent pas $key => $value
structure, lorsque vous utilisez la boucle foreach
, vous copiez la valeur de la position sur la variable de la boucle, dans ce cas $image
. Essayez d'utiliser ce code et cela résoudra votre problème.
for ($i=0; $i < count($images[1]); $i++)
{
if($images[1][$i] == 'http://i27.tinypic.com/29yk345.gif' ||
$images[1][$i] == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$images[1][$i] == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[1][$i]);
}
}
var_dump($images);die();