在foreach循环中取消设置数组值

我有一个foreach循环设置通过我的数组,检查某个链接,如果它发现它从数组中删除该链接。

我的代码:

foreach($images as $image) { if($image == '160wpb4.gif' || $image == 'http://img3.abload.de/img/10nx2340fhco.gif' || $image == '160wpb4.gif') { unset($images[$image]); } } 

但是它不会删除数组。 这可能与$images[$image] ,因为这不是数组input的关键,只是内容? 有没有办法做到这一点,没有纳入柜台?

谢谢。

编辑:谢谢你们,但现在我有另一个问题,其中数组条目实际上并没有被删除。

我的新代码:

 foreach($images[1] as $key => $image) { if($image == '160wpb4.gif') $image == 'http://img3.abload.de/img/10nx2340fhco.gif' || $image == '160wpb4.gif') { unset($images[$key]); } } 

$图像现在是一个二维数组,因此我需要$ images [1]。 我已经检查,它成功地绕过了数组元素,一些元素实际上有一些我想要删除的URL,但是它们并没有被删除。 这是我的$images数组:

 Array ( [0] => Array ( [0] => useless [1] => useless [2] => useless [3] => useless [4] => useless ) [1] => Array ( [0] => 160wpb4.gif [1] => http://img3.abload.de/img/10nx2340fhco.gif [2] => http://img3.abload.de/img/10nx2340fhco.gif [3] => 160wpb4.gif ) ) 

谢谢!

 foreach($images as $key => $image) { if(in_array($image, array( '160wpb4.gif', 'http://img3.abload.de/img/10nxjl0fhco.gif', '160wpb4.gif', )) { unset($images[$key]); } } 

尝试一下:

 foreach ($images as $key => &$image) { if (yourConditionGoesHere) { unset($images[$key]) } } 

通常情况下,foreach在你的数组副本上进行操作,所以你所做的任何修改都是针对该副本进行的,并不影响实际的数组。

所以你需要通过$ images [$ key]取消设置值。

&$ image上的引用可以防止循环创build数组的副本,浪费内存。

$image在你的情况下,该项目的价值,而不是关键。 使用以下语法也可以获得密钥:

 foreach ($images as $key => $value) { /* … */ } 

现在您可以删除未unset($images[$key])的项目unset($images[$key])

您可以使用数组元素的索引将其从数组中删除,下次使用$listvariables时,您将看到该数组已被更改。

尝试这样的事情

 foreach($list as $itemIndex => &$item) { if($item['status'] === false) { unset($list[itemIndex]); } } 

要回答最初的问题(编辑后),您需要取消设置($ images [1] [$ key]);

现在介绍一下PHP的工作原理:可以在foreach循环中安全地取消设置数组的元素,不pipe数组是否与数组项无关。 看到这个代码:

 $a=[1,2,3,4,5]; foreach($a as $key=>$val) { if ($key==3) unset($a[$key]); } print_r($a); 

这打印:

 Array ( [0] => 1 [1] => 2 [2] => 3 [4] => 5 ) 

正如你所看到的,如果你在foreach循环中取消正确的事情,一切正常。

你也需要一个

 $i--; 

在每个未设置之后不跳过元素/

因为当你取消设置$item[45] ,for循环中的下一个元素应该是$item[45] – 在取消设置之前是[46] 。 如果你不这样做,你总是跳过一个元素后,不设置。

一种解决scheme是使用你的项目的钥匙去除它们 – 当使用foreach循环时,你可以同时使用键和值。

例如 :

 $arr = array( 'a' => 123, 'b' => 456, 'c' => 789, ); foreach ($arr as $key => $item) { if ($item == 456) { unset($arr[$key]); } } var_dump($arr); 

最后会给你这个数组:

 array 'a' => int 123 'c' => int 789 

这意味着,在你的情况下,这样的事情应该做的伎俩:

 foreach($images as $key => $image) { if($image == '160wpb4.gif' || $image == 'http://img3.abload.de/img/10nx2340fhco.gif' || $image == '160wpb4.gif') { unset($images[$key]); } } 
 foreach($images as $key=>$image) { if($image == '160wpb4.gif' || $image == 'http://img3.abload.de/img/10nxjl0fhco.gif' || $image == '160wpb4.gif') { unset($images[$key]); } }
foreach($images as $key=>$image) { if($image == '160wpb4.gif' || $image == 'http://img3.abload.de/img/10nxjl0fhco.gif' || $image == '160wpb4.gif') { unset($images[$key]); } } 

foreach($图像为$ key => $ image

因为$ image是值,所以$ images [$ image]没有任何意义。

对不起,迟到的回应,我最近有与PHP相同的问题,并发现在使用不使用$key => $value结构的数组时,使用foreach循环时,实际上复制循环中位置的值variables,在这种情况下$image 。 尝试使用这个代码,它会解决你的问题。

 for ($i=0; $i < count($images[1]); $i++) { if($images[1][$i] == '160wpb4.gif' || $images[1][$i] == 'http://img3.abload.de/img/10nx2340fhco.gif' || $images[1][$i] == '160wpb4.gif') { unset($images[1][$i]); } } var_dump($images);die();