从循环

时间:2016-04-28 08:03:16

标签: php arrays

这个问题已被问了一千次,但我发现每个问题都谈到关联数组,其中一个人可以通过使用键作为标识符来删除(取消设置)一个项目。但是,如果你有一个简单的数组,没有键值对,你怎么做呢?

输入代码

$bananas = array('big_banana', 'small_banana', 'ripe_banana', 'yellow_banana', 'green_banana', 'brown_banana', 'peeled_banana');

foreach ($bananas as $banana) {
    // do stuff
    // remove current item
}

在Perl中,我会使用for和索引,但我不确定(最安全?)的方法 - 即使从我听到PHP在这些方面不那么严格。

请注意,在foreach运行之后,我希望var_dump($bananas)返回一个空数组(或者为null,但最好是一个空数组)。

6 个答案:

答案 0 :(得分:0)

它仍然有索引

 foreach ($bananas as $key => $banana) {
        // do stuff
        unset($bananas[$key]);
    }

答案 1 :(得分:0)

第一种方法(按价值比较删除):

$bananas = array('big_banana', 'small_banana', 'ripe_banana', 'yellow_banana', 'green_banana', 'brown_banana', 'peeled_banana');

foreach ($bananas as $key=>$banana) {
    if($banana=='big_banana')
        unset($bananas[$key]);
}

第二种方法(按键删除):

$bananas = array('big_banana', 'small_banana', 'ripe_banana', 'yellow_banana', 'green_banana', 'brown_banana', 'peeled_banana');
unset($bananas[0]);    //removes the first value
unset($bananas[count($bananas)-1]);    //removes the last value
//unset($bananas[n-1]);    removes the nth value

最后,如果要在删除过程后重置密钥:

$bananas = array_map('array_values', $bananas);

如果要完全清空阵列:

unset($bananas);
$bananas= array();

答案 2 :(得分:0)

for($i=0; $i<count($bananas); $i++)
{
    //doStuff
    unset($bananas[$i]);
}

这将在使用后删除每个元素,因此最终会得到一个空数组。

如果出于某种原因需要在删除后重新编制索引,可以使用array_values

答案 3 :(得分:0)

while循环array_shift怎么样?

while (($item = array_shift($bananas)) !== null)
{
    // 
}

答案 4 :(得分:0)

  

你的注意:请注意,在foreach运行之后,我希望var_dump($ bananas)返回一个空数组(或null,但最好是   一个空数组。)

只需使用unset

foreach ($bananas as $banana) {
    // do stuff
    // remove current item
    unset($bananas[$key]);
}


print_r($bananas);

<强>结果

Array
(
)

答案 5 :(得分:0)

这个问题很旧,但是我将使用array_slice向新访客发布我的想法。

while(!empty($bananas)) {
    // ... do something with $bananas[0] like
    echo $bananas[0].'<br>';
    $bananas = array_slice($bananas, 1);
}