如果我使用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
答案 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";