首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >取消设置foreach循环中的数组值

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

Stack Overflow用户
提问于 2010-01-06 04:31:37
回答 9查看 138.4K关注 0票数 75

我设置了一个foreach循环来遍历我的数组,检查某个链接,如果找到,就从数组中删除该链接。

我的代码:

代码语言:javascript
复制
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]有关,因为它不是数组条目的键,而是内容?有没有办法在不合并计数器的情况下做到这一点?

谢谢。

编辑:感谢大家,但是现在我有了另一个问题,数组条目实际上并没有被删除。

我的新代码:

代码语言:javascript
复制
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数组:

代码语言:javascript
复制
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
        )

)

谢谢!

EN

回答 9

Stack Overflow用户

发布于 2010-01-06 04:33:31

代码语言:javascript
复制
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]);
    }
}
票数 91
EN

Stack Overflow用户

发布于 2010-01-06 04:34:41

试一试:

代码语言:javascript
复制
foreach ($images[1] as $key => &$image) {
    if (yourConditionGoesHere) {
        unset($images[1][$key])
    }
}
unset($image); // detach reference after loop  

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

所以你需要通过$images[$key]来取消设置这些值;

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

票数 69
EN

Stack Overflow用户

发布于 2016-02-23 01:19:16

要回答初始问题(编辑后),您需要取消设置($images1);

现在,更多关于PHP如何工作的信息:您可以在foreach循环中安全地取消数组元素的设置,并且无论您是否为数组项设置了&。请参阅以下代码:

代码语言:javascript
复制
$a=[1,2,3,4,5];
foreach($a as $key=>$val)
{
   if ($key==3) unset($a[$key]);
}
print_r($a);

这将打印:

代码语言:javascript
复制
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [4] => 5
)

因此,正如您所看到的,如果您在foreach循环中取消设置正确的内容,一切都会正常工作。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2008866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档