PHP创建一个值等于true的数组

时间:2018-05-03 17:13:33

标签: php arrays loops

我已经将一系列参数从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()

5 个答案:

答案 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

时才有效

如果它们是字符串,只需使用==

进行比较