PHP создает массив со значениями, равными true - PullRequest
0 голосов
/ 03 мая 2018

Я передал ряд параметров из файла jQuery в сценарий PHP для обработки.

Некоторые параметры включают имена, адрес электронной почты, отдел и т. Д. Большинство параметров будут ИСТИНА или ЛОЖЬ.

Я хочу построить массив, включающий все параметры, которые равны ИСТИНА.

<?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 голосов
/ 03 мая 2018

Я могу догадаться по вашему вопросу, что вам нужно обработать список параметров, которые вас интересуют, каково их содержимое, например имя, отдел и адрес электронной почты, а также логический список атрибутов в одном и том же запросе 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;
    }
0 голосов
/ 03 мая 2018

Использование foreach:

foreach($value as $index => $bool){
    if($bool){
        $new_array[] = $index;
    }
}

Будет работать, только если ваши значения имеют тип bool, а не string

Если это строки, просто сравните их, используя ==

0 голосов
/ 03 мая 2018

Вы можете использовать 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'.

0 голосов
/ 03 мая 2018

Вам не нужен цикл вообще, только две функции: array_filter для фильтрации ложных значений и array_keys для получения ключей:

$array = array_keys(array_filter($values));

// results = ['parameter1', 'parameter3', 'parameter4']
0 голосов
/ 03 мая 2018

Никогда, действительно, никогда не используйте переменные со статическим приращением. Вот для чего вы используете массивы.

$arr = array();

for($i = 1; $i<=4; $i++)
{
    if(strcmp($value['parameter'.$i],"TRUE") === 0)
    {
        array_push($arr,"parameter$i");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...