我有一个字符串$ 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”),但我的问题是如何解析字符串然后从该信息中选择正确的复选框?
答案 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 />'
主要部分爆炸。