我设置了一个foreach循环来遍历我的数组,检查某个链接,如果找到,就从数组中删除该链接。
我的代码:
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]);
}
}
但它不会删除数组项。这可能与$images[$image]
有关,因为它不是数组条目的键,而是内容?有没有办法在不合并计数器的情况下做到这一点?
谢谢。
编辑:感谢大家,但是现在我有了另一个问题,数组条目实际上并没有被删除。
我的新代码:
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实际上是一个二维数组,这就是我需要$images1的原因。我已经检查过了,它成功地绕过了数组元素,有些元素确实有一些我想删除的URL,但它们没有被删除。这是我的$images
数组:
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
)
)
谢谢!
发布于 2010-01-06 04:33:31
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]);
}
}
发布于 2010-01-06 04:34:41
试一试:
foreach ($images[1] as $key => &$image) {
if (yourConditionGoesHere) {
unset($images[1][$key])
}
}
unset($image); // detach reference after loop
通常,foreach
对数组的副本进行操作,因此您所做的任何更改都会对该副本进行,并且不会影响实际的数组。
所以你需要通过$images[$key]
来取消设置这些值;
&$image
上的引用防止循环创建数组的副本,这会浪费内存。
发布于 2016-02-23 01:19:16
要回答初始问题(编辑后),您需要取消设置($images1);
现在,更多关于PHP如何工作的信息:您可以在foreach循环中安全地取消数组元素的设置,并且无论您是否为数组项设置了&。请参阅以下代码:
$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循环中取消设置正确的内容,一切都会正常工作。
https://stackoverflow.com/questions/2008866
复制相似问题