首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -- unset()能停止循环吗?

PHP -- unset()能停止循环吗?
EN

Stack Overflow用户
提问于 2021-11-27 11:24:01
回答 2查看 78关注 0票数 0

我在尝试remove all the element of PHP array如果the value equals zero

我试着用很多方法读the unset document,但是我仍然被困在那里

我的HTML page。我有9 input type = numbername = count[]

代码语言:javascript
复制
<form action="send.php" method="post">
    <div>
        <input type="number" name="count[]" id="count-1" value="0" min="0" max="99">
    </div>
    <div>
        <input type="number" name="count[]" id="count-2" value="0" min="0" max="99">
    </div>
    <div>
        <input type="number" name="count[]" id="count-3" value="0" min="0" max="99">
    </div>
    ...
    <div>
        <input type="number" name="count[]" id="count-9" value="0" min="0" max="99">
    </div>
    <div>
        <input type="submit" value="submit" name="submit">
    </div>
</form>

这是我的send.php文件

我的意思是,如果$count的一个元素等于zero,我将从数组中remove该元素。但似乎有些地方出了问题。

代码语言:javascript
复制
<?php
if (isset($_POST)) {
    $count = $_POST["count"];
    for ($i = 0; $i < count($count); $i++) {
        if (0 == (int) $count[$i])
            unset($count[$i]);
    }
}

这是我的POST data

代码语言:javascript
复制
Array
(
    [count] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
            [7] => 0
            [8] => 0
        )

    [submit] => submit
)

这是我得到的$count array的数据。我不知道为什么if statement不能处理一些最后的元素。

代码语言:javascript
复制
Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [6] => 0
    [7] => 0
    [8] => 0
)

我用的是PHP 8

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-27 11:30:47

您可以使用array_filter删除零,而不是遍历数组和检查每个值。默认情况下,array_filter删除空值,其中之一是PHP中的0'0'。下面是一个使用演示的工作array_filter

代码语言:javascript
复制
$count = array_filter($_POST["count"]);

当前的实现将无法工作,因为在for语句中使用的是count。由于您是unset-ing,因此数组值对于循环的下一个迭代器的计数将更少。

一个简单的例子是这样的:第一次迭代count是7。经过两次迭代,我们从数组中取消了一个值。在下一次迭代中,count将返回6。对于每个unset,在增加$i的同时,您正在减少count返回的值。解决这个问题的方法是在循环之前存储初始的count,因此它是循环期间的一个固定值。这是一个工作的演示或那个。

代码语言:javascript
复制
$numOfCounts = count($count);

for ($i = 0; $i < $numOfCounts; $i++) {
    if (0 == (int) $count[$i])
        unset($count[$i]);
}
票数 3
EN

Stack Overflow用户

发布于 2021-11-27 11:28:55

仅使用php过滤器函数(https://www.php.net/manual/en/function.array-filter.php)过滤器

代码语言:javascript
复制
$count = [];
if (isset($_POST["count"])
   $count = array_filter(function($a){ return $a !== 0; }, $_POST["count"]);

print_r($count);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70134329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档