Необходимо выполнить оператор if внутри цикла php foreach

#php #if-statement #foreach

#php #if-оператор #foreach

Вопрос:

Я работаю с Filemaker API, который похож на sql — в основном он извлекает данные из полей и из списка.

Я пытаюсь настроить оператор if внутри моего цикла foreach, чтобы он добавлял тег selected=»выбранный» к моей опции выбора в моем html

Вот код

 <?php

$layout =amp; $fm->getLayout('Leads');

$values = $layout->getValueList('LeadStatus');

$list_menu = '<select name="LeadDocStatusSelect">';



foreach ($values as $value) 
    {
    $list_menu .='<option value="' . $value . '">' . $value . '</option>' ;
    }


$list_menu .= '</select>';
echo $list_menu;
?>
  

Как я могу добавить оператор if, подобный этому, в цикл foreach?

 if ($businessJudgements == 'No') {
    echo 'checked="checked"';
} else {
    echo '';
}
  

Ответ №1:

Тело foreach цикла — это просто блок операторов, поэтому вы можете вставить столько, сколько захотите, например, с:

 foreach ($values as $value) {
    $list_menu .='<option value="' . $value . '">' . $value . '</option>';
    if ($businessJudgements == 'No') {
        echo 'checked="checked"';
    } else {
        echo '';
    }
}
  

Однако вы уверены, что у вас есть правильный атрибут для option тега? Если вы намерены выбрать определенную опцию, checked это неправильный метод (он предназначен для полей ввода флажков). selected Атрибут является правильным для тега HTML option .

Поэтому вам было бы лучше использовать что-то вроде:

 # The default is orange.

$default_value = "orange";

# Process every option.

foreach ($values as $value) {
    # Add [<option value="X"].

    $list_menu .= '<option value="' . $value . '"';

    # Add [ selected] ONLY for default one.

    if ($value == $default_value) {
        $list_menu .= ' selected';
    }

    # Add [>X</option>].

    $list_menu .= '>' . $value . '</option>';
}
  

Это даст вам option теги по желанию, но к тому, значение которого соответствует значению по умолчанию, также будет прикреплен selected атрибут.

Предполагая, что $values хранится массив {"red", "black", "orange", "yellow"} , вы бы получили (красиво отформатированный здесь для целей ответа):

 <option value="red">             red    </option>
<option value="black">           black  </option>
<option value="orange" selected> orange </option>
<option value="yellow">          yellow </option>
  

Комментарии:

1. ; позволяет мне добавить оператор if к переменной?

2. @user3795995, вы не добавляете if оператор к переменной. Скорее вы запускаете if внутри foreach , чтобы немного изменить меню списка, которое вы создаете. Смотрите мой второй сегмент кода для одного из способов сделать это.

3. Ааааа, в этом есть смысл! Я знал, что выбран правильный атрибут. Должно ли это быть ‘Selected =»Выбранный»‘?

4. @user3795995, не для HTML, просто selected само по себе будет в порядке. XHTML запрещает минимизацию, так что это потребуется selected="selected" .

Ответ №2:

Я предполагаю, что вы уже знаете, как получить свое $ businessJudgement , так что код должен быть примерно таким

 <?php

$layout =amp; $fm->getLayout('Leads');

$values = $layout->getValueList('LeadStatus');

$list_menu = '<select name="LeadDocStatusSelect">';



foreach ($values as $value) 
    {


    if ($businessJudgements == 'No') {
     $list_menu .='<option value="' . $value . '">' . $value . '</option>' ;
} else {
     $list_menu .='<option value="' . $value . '" selected >' . $value . '</option>' ;
}


    }


$list_menu .= '</select>';
echo $list_menu;
?>
  

Комментарии:

1. Поскольку код находится в рабочем состоянии, такое использование echo внутри цикла довольно контрпродуктивно. РЕДАКТИРОВАТЬ: теперь лучше.