我有一个将参数传递给后端php文件的javascript文件。这将试图找出哪些值是真的。
这是传递的参数
{"2":true,"3":false,"4":true}
这是将提取True数组的键的PHP代码,
<?php
print_r(loop_filters($_REQUEST['filters']));
// Functions starts here
function loop_filters($filters)
{
$filters = json_decode($filters);
// return $filters;
$filter_array = [];
while($filter_key = current($filters))
{
if($filter_key === true)
{
$filter_array[] = key($filters);
}
next($filters);
}
return $filter_array;
}
?>
然而输出是
Array ( [0] => 2 )
为什么它没有检测到4为真,并给出类似
的输出Array ( [0] => 2 , [1] => 4)
出了什么问题,我该如何解决?感谢
答案 0 :(得分:5)
您的代码无法正常运行:
while($filter_key = current($filters))
因为在第二次迭代中,您的值将是:FALSE
并且我们都知道:
while(FALSE)
这不会运行,所以你在第一次迭代之后就结束了循环。
如何解决?只需删除next()
调用并使用foreach循环替换while循环,例如
function loop_filters($filters) {
$filters = json_decode($filters);
foreach($filters as $key => $filter_key) {
if($filter_key === true) {
$filter_array[] = $key;
}
}
return $filter_array;
}
答案 1 :(得分:1)
Rizier123解决了您的代码问题,但是对于这种特定情况,要获得true
值的键更简单:
$filter_array = array_keys($filters, true, true);