PHP从字符串中预选复选框

时间:2012-03-07 15:21:51

标签: php selected

我有一个字符串$ eventdays,其中包含有关选择了哪些日期的信息。

数据格式为:

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

沫,星期二,星期三,星期四,星期五,星期六,星期日

因此,如果选择了例如星期二和星期五,则字符串将为:

Tu,Fr

如果选择星期一,星期三和星期六,那将是:

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 />

我知道如何预先选中一个复选框(checked =“yes”),但我的问题是如何解析字符串然后从该信息中选择正确的复选框?

3 个答案:

答案 0 :(得分:2)

您可以使用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 />

答案 1 :(得分:2)

假设您的输入是一个带换行符的字符串...首先将您的数据处理成一个键控数组,以使生活更轻松......我使用了正则表达式使其更加强大,以防止格式化更改。

$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函数检查是否应选择当前的一个。我还使用了checked =“checked”,这是选择复选框的符合标准的方式...请参阅this question

$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 />

答案 2 :(得分:0)

使用explode(),它返回一个数组

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

然后你有一个数组,其中包含必须检查的日期。然后,您可以在阵列上进行循环并编写逻辑。 我想糟糕的方法,但建立一个$ checkeddays数组,如:

[0] =&gt; “检查”, [1] =&gt; '',

依此类推,然后使用它:

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

主要部分爆炸。