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

2022-08-30 08:34:13

我设置了一个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
        )

)

谢谢!


答案 1
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]);
    }
}

答案 2

试试看:

foreach ($images[1] as $key => &$image) {
    if (yourConditionGoesHere) {
        unset($images[1][$key])
    }
}
unset($image); // detach reference after loop  

通常,对数组的副本进行操作,因此您所做的任何更改都会对该副本进行,并且不会影响实际的数组。foreach

因此,您需要通过以下方式取消设置值$images[$key];

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