从数组中删除元素,而不是使用unset()

时间:2014-06-06 15:43:39

标签: php arrays

如果我使用unset(),我会删除错误:Undefined offset:。我怎么能删除它 适当的?

PHP:

<pre>
<?php

$a = array("foo", "baa", "ahahaha");

unset($a[1]);
//echo '<pre>'; print_r($a);

for($i = 0; $i < count($a); $i++) {
    echo 'val at ', $i;
    echo " ", $a[$i], "\r\n";
}

?>

错误:

  

注意:未定义的偏移量:file.php中的1

5 个答案:

答案 0 :(得分:3)

您需要重新索引数组以使用递增的数字循环它:

unset($a[1]);
$a = array_values($a);

for($i = 0; $i < count($a); $i++) {
    echo 'val at ', $i;
    echo " ", $a[$i], "\r\n";
}

或只是foreach数组:

foreach($a as $key => $val) {
    echo 'val at ', key;
    echo " ", $val, "\r\n";
}

为了完整性,您还可以使用空数组合并重新索引:

unset($a[1]);
$a = array_merge(array(), $a);

答案 1 :(得分:3)

是否要删除特定的单个数组项,并重新编制索引?

array_splice($a, $index_to_remove, 1);

答案 2 :(得分:1)

如果您想避免未定义的错误。你可以使用foreach

unset($a[1]);
foreach($a as $key => $value) {
    echo 'val as' . $key;
    echo ' ' . $value . "<br/>";
}

答案 3 :(得分:1)

重新索引数组就是解决方案,记住你要删除一个元素,并使用for迭代循环通过所有项目,包括索引1

<pre>
<?php

$a = array("foo", "baa", "ahahaha");

unset($a[1]);

$newarray = array_values($a); // here reindex the array
//echo '<pre>'; 
print_r($newarray);

for($i = 0; $i < count($newarray); $i++) {
    echo 'val at ', $i;
    echo " ", $newarray[$i], "\r\n";
}

?>

答案 4 :(得分:1)

我认为你的问题已经指出错误的地方未设置的错误是诚实的。 取消设置DID工作。这是&#34; for&#34;创建错误的循环。

您遇到的问题是,当您取消设置密钥时,您删除了密钥名称&#34; 1&#34;。它没有更新数组索引,因此,数组只包含键&#34; 0&#34;和&#34; 2&#34;。 &#34; 1&#34;不存在。

你的&#34; for&#34;然后循环尝试查看$ a [1]并且它不存在。是的,剩下两个元素,但它们没有被称为#34; 0&#34;和&#34; 1&#34;但是&#34; 0&#34;和&#34; 2&#34;。

解决方案:要从数组中删除元素,然后更新索引,则需要执行此操作......

$r = 1; // The index number you want to remove.
array_splice($a,$r,1);

// Get value you removed?
$ir = array_slice($a,$r,1);
echo "Just removed $ir[0] from array";