我在尝试remove all the element of PHP array如果the value equals zero
我试着用很多方法读the unset document,但是我仍然被困在那里
我的HTML page。我有9 input type = number和name = count[]
<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该元素。但似乎有些地方出了问题。
<?php
if (isset($_POST)) {
$count = $_POST["count"];
for ($i = 0; $i < count($count); $i++) {
if (0 == (int) $count[$i])
unset($count[$i]);
}
}这是我的POST data
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不能处理一些最后的元素。
Array
(
[0] => 1
[1] => 1
[2] => 1
[6] => 0
[7] => 0
[8] => 0
)我用的是PHP 8
谢谢!
发布于 2021-11-27 11:30:47
您可以使用array_filter删除零,而不是遍历数组和检查每个值。默认情况下,array_filter删除空值,其中之一是PHP中的0和'0'。下面是一个使用演示的工作array_filter。
$count = array_filter($_POST["count"]);当前的实现将无法工作,因为在for语句中使用的是count。由于您是unset-ing,因此数组值对于循环的下一个迭代器的计数将更少。
一个简单的例子是这样的:第一次迭代count是7。经过两次迭代,我们从数组中取消了一个值。在下一次迭代中,count将返回6。对于每个unset,在增加$i的同时,您正在减少count返回的值。解决这个问题的方法是在循环之前存储初始的count,因此它是循环期间的一个固定值。这是一个工作的演示或那个。
$numOfCounts = count($count);
for ($i = 0; $i < $numOfCounts; $i++) {
if (0 == (int) $count[$i])
unset($count[$i]);
}发布于 2021-11-27 11:28:55
仅使用php过滤器函数(https://www.php.net/manual/en/function.array-filter.php)过滤器
$count = [];
if (isset($_POST["count"])
$count = array_filter(function($a){ return $a !== 0; }, $_POST["count"]);
print_r($count);https://stackoverflow.com/questions/70134329
复制相似问题