2012-03-07 76 views
0

我有一个字符串$ eventdays,它包含有关选择哪些日期的信息。PHP从字符串中预选复选框

数据的格式为:

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

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

回答

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

优秀的答案 - 完美! – user1233852 2012-03-07 16:04:45

0

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

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

,那么你必须使用具有被选中的日期的数组。然后你可以在数组上创建一个循环并编写你的逻辑。 我想糟糕的方法,但建立一个$ checkeddays阵列,如:

[0] => '检查', [1] => '',

等,然后使用它:

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

主要部分爆炸。

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