PHP Предварительный выбор флажков из строки - PullRequest
0 голосов
/ 07 марта 2012

У меня есть строка $ eventdays, которая содержит информацию о том, какие дни выбраны.

Формат данных:

Monday = Mo 
Tuesday = Tu
Wedneday = We
Thursday = Th
Friday = Fr
Saturday = Sa
Sunday = Su

Мо, Ту, Мы, Чт, Fr, Sa, Su

Таким образом, если, например, были выбраны вторник и пятница, строка будет выглядеть следующим образом:

Tu,Fr

Если были выбраны понедельник, среда и суббота, этоbe:

Mo,We,Sa

Примечание: можно выбрать любую комбинацию дней.

Мне было интересно, как получить эту информацию, и предварительно установить флажки.Флажки:

<input type="checkbox" name="days[]" value="Mo" />Monday<br />
<input type="checkbox" name="days[]" value="Tu" />Tuesday<br />
<input type="checkbox" name="days[]" value="We" />Wednesday<br />
<input type="checkbox" name="days[]" value="Th" />Thursday<br />
<input type="checkbox" name="days[]" value="Fr" />Friday<br />
<input type="checkbox" name="days[]" value="Sa" />Saturday<br />
<input type="checkbox" name="days[]" value="Su" />Sunday<br />

Я знаю, как предварительно установить флажок (флажок = "да"), но у меня вопрос, как я могу разобрать строку и затем выбрать правильные флажки из этой информации?

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Вы можете использовать strpos и динамически генерировать свои флажки.

$eventdays = "Tu,Fr"; // Selected days

$days = array( "Monday"   => "Mo",
               "Tuesday"  => "Tu",
               "Wedneday" => "We",
               "Thursday" => "Th",
               "Friday"   => "Fr",
               "Saturday" => "Sa",
               "Sunday"   => "Su"
            );

foreach ($days AS $day => $shortDay) {
    // Is there an event on this day?
    $checked = strpos($eventdays, $shortDay) !== FALSE ? "checked='checked'" : "";
    // Generate checkbox HTML
    echo "<input type='checkbox' name='days[]' value='{$shortDay}' {$checked} />{$day}<br />"; 
}

выход

<input type='checkbox' name='days[]' value='Mo' />Monday<br />
<input type='checkbox' name='days[]' value='Tu'  checked='checked'/>Tuesday<br />
<input type='checkbox' name='days[]' value='We' />Wedneday<br />
<input type='checkbox' name='days[]' value='Th' />Thursday<br />
<input type='checkbox' name='days[]' value='Fr'  checked='checked'/>Friday<br />
<input type='checkbox' name='days[]' value='Sa' />Saturday<br />
<input type='checkbox' name='days[]' value='Su' />Sunday<br />
2 голосов
/ 07 марта 2012

Предполагая, что ваш ввод - это строка с переносами строк ... Сначала обработайте данные в массиве с ключами, чтобы упростить жизнь ... Я использовал регулярные выражения, чтобы сделать их более устойчивыми к изменениям форматирования.

$eventdays="Monday = Mo
Tuesday = Tu
Wedneday = We
Thursday = Th
Friday = Fr
Saturday = Sa
Sunday = Su";

$lines = explode("\n", $eventdays);
$data = array();
foreach ($lines as $line) {
  if (preg_match("/(\w+)\s*=\s*(\w+)/", $line, $match)) {
    $data[] = array('value'=>$match[2], 'label' => $match[1]);
  }
}

Теперь просто переберите структуру, распечатав ключи / метки. Используйте функцию in_array, чтобы проверить, должна ли быть выбрана текущая. Также я использовал зарегистрированный = проверенный способ выбора флажков ... См. этот вопрос .

$selected_test="Mo,We,Sa";   
$select=explode(",", $selected_test);

foreach ($data as $datum) {
  $checked="";
  if (in_array($datum['value'], $select)) {
    $checked = " checked=\"checked\"";
  }
  echo <<< EOF
<input type="checkbox" name="days[]" value="{$datum['value']}"$checked/>{$datum['label']}<br />\n
EOF;
}

выход

<input type="checkbox" name="days[]" value="Mo" checked="checked"/>Monday<br />
<input type="checkbox" name="days[]" value="Tu"/>Tuesday<br />
<input type="checkbox" name="days[]" value="We" checked="checked"/>Wedneday<br />
<input type="checkbox" name="days[]" value="Th"/>Thursday<br />
<input type="checkbox" name="days[]" value="Fr"/>Friday<br />
<input type="checkbox" name="days[]" value="Sa" checked="checked"/>Saturday<br />
<input type="checkbox" name="days[]" value="Su"/>Sunday<br />
0 голосов
/ 07 марта 2012

используйте explode (), он возвращает массив

$days  = "mon,tu";
$needstobeselected= explode(",", $days);

, тогда у вас есть массив с днями, которые необходимо проверить.Затем вы можете сделать цикл в массиве и написать свою логику.Я думаю, дрянной метод, но построить массив $ checkeddays, например:

[0] => 'checked', [1] => '',

и так далее, а затем использовать его:

echo '<input type="checkbox" name="days[]" value="Mo" '.$checkeddays[0].'/>Monday<br />'

основная часть взорвана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...