我已经将一系列参数从jQuery文件传递到PHP脚本进行处理。
一些参数包括姓名,电子邮件,部门等。大部分参数都是TRUE或FALSE。
我想构建一个数组,以包含所有等于TRUE的参数。
<?php
$value = $_POST['criteria'];
$firstname = $value['firstname'];
$email = $value['email'];
$department = $value['department'];
$parameter1 = $value['parameter1']; // equals TRUE
$parameter2 = $value['parameter2']; // equals FALSE
$parameter3 = $value['parameter3']; // equals TRUE
$parameter4 = $value['parameter4']; // equals TRUE
?>
所以我想要生成的数组的结果应如下所示:
$array = ['parameter1', 'parameter3', 'parameter4'];
我知道我必须使用循环,但我不确定如何启动它。
这是我在jQuery中创建变量条件的地方,从按钮单击事件开始:
$('#requestAppSubmit').on('click', function()
{
var criteria =
{
firstname: $('#firstname').val(),
email: $('#email').val(),
department: $('#department').val(),
// the next parameters check if a checkbox was checked
parameter1: $('#dashboard').is(':checked'),
parameter2: $('#schedules').is(':checked'),
parameter3: $('#finance').is(':checked'),
parameter4: $('#businessplan').is(':checked'),
// quite a few more parameters
}
// then I use a ajax post
$.post('process/editRep.php', {criteria:criteria}, function(data)
{
console.log(data);
//
});
});
此时,根据您的建议,我能输出的最多是:
Array()
答案 0 :(得分:3)
您可以使用array_filter()
仅保留布尔值,然后使用array_keys()
获取名称:
$value = [
'firstname'=>'foo',
'email'=>'bar',
'department'=>'baz',
'parameter1'=>true,
'parameter2'=>false,
'parameter3'=>true,
'parameter4'=>true
];
$array = array_filter($value, function($item) {
return $item === true;
});
$array = array_keys($array);
print_r($array);
输出:
Array
(
[0] => parameter1
[1] => parameter3
[2] => parameter4
)
如果值不是布尔值,您还可以使用:
$array = array_filter($value, function($item) {
return is_numeric($item) && $item == true;
});
这适用于'0'
和'1'
。
答案 1 :(得分:2)
根本不需要循环,只需要两个函数:array_filter来过滤掉false值,array_keys来获取键:
$array = array_keys(array_filter($values));
// results = ['parameter1', 'parameter3', 'parameter4']
答案 2 :(得分:1)
我可以从您的问题中猜到,您需要在同一个POST请求中处理您关注的内容如名称,部门和电子邮件以及布尔属性列表的参数列表。
我将封装你需要传递给数组的所有布尔属性:
<input type="checkbox" name="options[parameter1]"/>
<input type="checkbox" name="options[parameter2]"/>
...
并在PHP中处理它:
<?php
$options = $_POST['options'] ?? [];
$onlyTrueOptions = array();
foreach($options as $optionName => $value) {
if($value) // or another desidered comparison
$onlyTrueOptions[] = $optionName;
}
答案 3 :(得分:0)
从来没有,真的从不使用&#34;静态递增&#34;变量。这就是你使用数组的原因。
$arr = array();
for($i = 1; $i<=4; $i++)
{
if(strcmp($value['parameter'.$i],"TRUE") === 0)
{
array_push($arr,"parameter$i");
}
}
答案 4 :(得分:0)
使用foreach
:
foreach($value as $index => $bool){
if($bool){
$new_array[] = $index;
}
}
仅在您的值为bool
类型而非string
如果它们是字符串,只需使用==