gpt4 book ai didi

php - 在迭代数组时使用 unset() 来删除空值

转载 作者:行者123 更新时间:2023-12-02 15:20:52 27 4
gpt4 key购买 nike

尝试像这样从数组中删除空值。每次我使用 unset() 时,它都会错过一个键。我知道可能有更好的方法来完成任务,但我需要知道为什么当前代码缺少一些键?

$values_arr = array(
0 => "Text",
1 => "",
2 => "",
3 => "Text",
4 => "",
5 => "Text"
);

理论上可行

for ($i = 0; $i < count($values_arr); $i++) {
if ( empty($values_arr[$i]) ) {
echo "<br> Blank key found " . $i . ", value was >" . $values_arr[$i] . "<";
//Unset commented out
//unset($values_arr[$i]);
}
}

var_dump($values_arr);

输出

Blank key found 1, value was ><
Blank key found 2, value was ><
Blank key found 4, value was ><

array (size=6)
0 => string 'Text' (length=4)
1 => string '' (length=0)
2 => string '' (length=0)
3 => string 'Text' (length=4)
4 => string '' (length=0)
5 => string 'Text' (length=4)

取消设置不起作用

for ($i = 0; $i < count($values_arr); $i++) {
if ( empty($values_arr[$i]) ) {
echo "<br> Blank key found " . $i . ", value was >" . $values_arr[$i] . "<";
unset($values_arr[$i]);
}
}

var_dump($values_arr);

输出

Blank key found 1, value was ><
Blank key found 2, value was ><

array (size=4)
0 => string 'Text' (length=4)
3 => string 'Text' (length=4)
4 => string '' (length=0)
5 => string 'Text' (length=4)

为什么键 4 没有被取消设置?

最佳答案

您的代码的问题在于,当您到达索引 4 时,它将等于数组的大小并且循环停止。

对此有一个简单的解决方案:

$values_arr = array_filter($values_arr, 'strlen');

它对每个数组元素执行 strlen() 并返回一个包含非空字符串元素的新数组。

另一种方法是找到与空字符串值对应的键,然后在主数组中逐个unset()这些键:

foreach (array_keys($values_arr, '', true) as $key) {
unset($values_arr[$key]);
}

关于php - 在迭代数组时使用 unset() 来删除空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com