【发布时间】:2011-01-01 19:20:24
【问题描述】:
我设置了一个 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 现在实际上是一个二维数组,因此我需要 $images[1]。我已经检查过了,它成功地绕过了数组元素,有些元素实际上确实有一些我希望删除的 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
)
)
谢谢!
【问题讨论】:
-
我还建议 if(in_array($image, array('i27.tinypic.com/29yk345.gif', 'img3.abload.de/img/10nx2340fhco.gif', 'i42.tinypic.com/9pp2456x.gif'))。使它更具可读性;)
-
由于您更改了正在迭代的数组,因此需要在调用 unset - unset($images[1][$key]); 时反映出来
-
if 语句中的括号是错误的,但我猜这只是错字(否则你会收到错误消息)
-
"注意:当foreach第一次开始执行时,内部数组指针会自动重置为数组的第一个元素。这意味着您不需要在foreach循环之前调用reset()。如foreach 依赖于内部数组指针,在循环内更改它可能会导致意外行为。”取自php手册