2012-03-07 9 views
0

私は、選択した日に関する情報を保持する文字列$ eventdaysを持っています。PHP文字列からチェックボックスをあらかじめ選択します。

データの形式は次のとおりです。

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

たとえば火曜日と金曜日は選ばれたその場合のMo、火、我々、Thを、FR、SA、蘇

、文字列が希望:

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

私は(=「yes」をチェックする)チェックボックスを事前選択する方法を知っているが、私の質問はどのように私は文字列を解析し、その情報から正しいチェックボックスを選択することができますか?

答えて

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

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; 
} 

出力は優秀Answer-

<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 /> 
関連する問題