这个问题已被问了一千次,但我发现每个问题都谈到关联数组,其中一个人可以通过使用键作为标识符来删除(取消设置)一个项目。但是,如果你有一个简单的数组,没有键值对,你怎么做呢?
输入代码
$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,但最好是一个空数组)。
答案 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);
}