【问题标题】:PHP Preselect check boxes from a StringPHP 从字符串中预选复选框
【发布时间】:2012-03-25 03:20:54
【问题描述】:

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

数据格式为:

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

Mo,Tu,We,Th,Fr,Sa,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"),但我的问题是如何解析字符串,然后从该信息中选择正确的复选框?

【问题讨论】:

    标签: php selected


    【解决方案1】:

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

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

    那么你有一个数组,其中包含必须检查的日期。然后你可以在数组上循环并编写你的逻辑。 我猜这个方法很糟糕,但是构建一个 $checkeddays 数组,比如:

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

    等等,然后使用它:

    echo '<input type="checkbox" name="days[]" value="Mo" '.$checkeddays[0].'/>Monday<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 />
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多