带有复选框值的PHP问题 [英] PHP issue with checkbox value

查看:58
本文介绍了带有复选框值的PHP问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个PHP代码:
$ b

  function makeTable($ data){
$ ordered = array_map(function($ day){
return array_keys($ day);
},$ data);

$ headers = array_map(函数($ a){
return< th> $ a< / th>;
},array_keys($ ordered));

$ max_indice = max(array_map(函数($ day){
返回计数($ day) - 1;
},$ ordered));

$ b $ rows = array_map(function($ i)use($ ordered){
return'< tr>'join(array_map(function($ day)use ($ i){
return'< td>< input type =checkboxname =datetimeid =datetimevalue ='。$ i。'/>'。$ day [$ i]。'< / td>';
},$ ordered))。'< / tr>';
},范围(0,$ max_indice));
echo< table border ='1'>。join($ headers)。< tbody>。join($ rows)。< / tbody>< / table>;
}

makeTable($ datesAvailableArray);

这个函数做了什么,它需要我的数组 $ datesAvailableArray

$ b $ [b] [星期六] = >数组

[11:00 am] => 0
[12:00 pm] => 0
[1:00 pm] => 0
[2:00 pm] => 0
[3:00 pm] => 0
[4:00 pm] => 0
[5:00 pm] => 0 $


[Sunday] => Array

[11:00 am] => 0
[12:00 pm] => 0
[下午1:00] => 0
[2:00 pm] => 0
[3:00 pm] => 0
[4:00 pm] => ; 0
[5:00 pm] => 0


[Monday] => Array

[11:00 am] = > 0
[12:00 pm] => 0
[1:00 pm] => 0
[2:00 pm] => 0
[3:00 pm ] => 0
[4:00 pm] => 0
[5:00 pm] => 0


[Tuesday] =>阵列

[11:00 am] => 0
[12:00 pm] => 0
[1:00 pm] => 0
[ 2:00 pm] => 0
[3:00 pm] => 0
[4:00 pm] => 0
[5:00 pm] => 0


[Wednesday] =>阵列

[11:00 am] => 0
[12:00 pm] => 0
[1:00 pm] => 0
[ 2:00 pm] => 0
[3:00 pm] => 0
[4:00 pm] => 0
[5:00 pm] => 0


[Thursday] =>阵列

[11:00 am] => 0
[12:00 pm] => 0
[1:00 pm] => 0
[ 2:00 pm] => 0
[3:00 pm] => 0
[4:00 pm] => 0
[5:00 pm] => 0


[Friday] =>阵列

[11:00 am] => 0
[12:00 pm] => 0
[1:00 pm] => 0
[ 2:00 pm] => 0
[3:00 pm] => 0
[4:00 pm] => 0
[5:00 pm] => 0


并生成这个html表格:

 < table border =1> 
< tbody>
< tr>
< th>
11月15日星期六
< / th>
< th>
11月16日星期天
< / th>
< th>
11月17日星期一
< / th>
< th>
11月18日星期二
< / th>
< th>
11月19日星期三
< / th>
< th>
11月20日星期四
< / th>
< th>
11月21日星期五
< / th>
< / tr>
< / tbody>
< tbody>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =0>
11:00 am
< / td>
< / tr>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =1>
12:00 pm
< / td>
< / tr>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =2>
1:00 pm
< / td>
< / tr>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =3>
2:00 pm
< / td>
< / tr>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =4>
3:00 pm
< / td>
< / tr>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
4:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
4:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
4:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
4:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
4:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
4:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =5>
下午4:00
< / td>
< / tr>
< tr>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
5:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
下午5:00
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
下午5:00
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
5:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
5:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
5:00 pm
< / td>
< td>
< input type =checkboxname =datetimeid =datetimevalue =6>
下午5:00
< / td>
< / tr>
< / tbody>
< / table>

我要做的是将标题日期作为复选框值。这可能与此代码?

解决方案

首先你要改变你的 $ datesAvailableArray 以便它包含实际日期。
ISO 8601 字符串是极好的格式。


$ $ b $ $ $ $ $ $ $ $ $ $ $ $ $ $'$'$'$'$'$'$'$'$'$' $ b'2014-11-14T12:00:00Z',
'2014-11-14T13:00:00Z',
'2014-11-14T14:00:00Z'
) ,
'Sunday'=> array(
'2014-11-15T11:00:00Z',
'2014-11-15T12:00:00Z',
' 2014-11-15T13:00:00Z',
'2014-11-15T14:00:00Z'

);

既然我们有日期字符串,我们可以创建DateTime对象来格式化日期:

  $ saturday_1100 = DateTimeImmutable :: createFromFormat(DateTime :: ISO8601,'2014-11-14T11:00:00Z'); 
$ saturday_1100->格式('g:ia'); //上午11:00

在我们的例子中,我们使用 DateTimeImmutable类,因为我们不想在创建日期后更改日期。



因此,让我们更改我们的 makeTable 函数以使用我们的新朋友 DateTimeImmutable

  function makeTable($ data){

$ headers = array_map(function($ a){
return < th> $ a< / th>;
},array_keys($ data));

$ max_indice = max(array_map(function($ day){
return count($ day) - 1;
},$ data));

//创建一个按小时分组的新数组
$ rows = array_map(function($ i)use($ data){
//创建每个小时
return'< tr>'。join(array_map(function($ day)use($ i){
$ ts = isset($ day [$ i])?DateTimeImmutable :: createFromFormat(DateTime :: ($ ts){
$ label ='< label for =datetime>'。$ ts-> format(' g:ia')。'< / label>';
$ input = vsprintf(
'< input type =checkboxname =datetimeid =%svalue = ('c')/ $'$' /价值

);
返回'< td>'。$ label。$ input。'< td>';
} else {
return < TD>< / td>';
}
},$ data))。 < / TR>;
},范围(0,$ max_indice));

//不要摆脱thead元素。
//它告诉浏览器你的表是一个真实的包含数据的表格,而不仅仅是一个糟糕的布局。
返回
< table>
< caption>我的表< / caption>
< thead>。join($ headers,'\ n')。 < / tbody>
< / table>;< / tbody>
< tbody>
}

echo makeTable($ datesAvailableArray); 会给我们这样的东西:

 < table> 
< caption>
我的表
< / caption>

< thead>
< tr>
< th>星期六< / th>
< th>星期日< / th>
< / tr>
< / thead>

< tbody>
< tr>
< td>< label for =datetime> 11:00 am< / label>< input type =checkboxname =datetimeid =datetime_1415962800value =2014-11- 14T11:00:00 + 00:00/>< / td>
< td>< label for =datetime> 11:00 am< / label>< input type =checkboxname =datetimeid =datetime_1416049200value =2014-11- 15T11:00:00 + 00:00/>< / td>
< / tr>
< tr>
< td>< label for =datetime> 12:00 pm< / label>< input type =checkboxname =datetimeid =datetime_1415966400value =2014-11- 14T12:00:00 + 00:00/>< / td>
< td>< label for =datetime> 12:00 pm< / label>< input type =checkboxname =datetimeid =datetime_1416052800value =2014-11- 15T12:00:00 + 00:00/>< / td>
< / tr>
<! - - 更多... - >
< / tbody>
< / table>

总结:

为输入ID。发布此表单时发送的值是一个ISO-8601日期字符串。
我们还在< label> 标签中包含了我们的小时文本,其中包含一个for属性,这对于辅助功能很有用。


I have this PHP code:

function makeTable($data){
    $ordered = array_map(function($day) {
        return array_keys($day);
    }, $data);

    $headers = array_map(function($a) {
        return "<th>$a</th>";
    }, array_keys($ordered));

    $max_indice = max( array_map(function($day) {
        return count($day) - 1;
    }, $ordered) );


    $rows = array_map(function($i) use ($ordered) {
        return '<tr>' . join( array_map(function($day) use ($i) {
            return '<td><input type="checkbox" name="datetime" id="datetime" value="' . $i . '" />' . $day[$i] . '</td>';
        }, $ordered)) . '</tr>';
    }, range(0, $max_indice));
    echo "<table border='1'>".join($headers)."<tbody>".join($rows)."</tbody></table>";
}

makeTable($datesAvailableArray);

What this function does, it takes my array of $datesAvailableArray:

Array
(
    [Saturday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )

    [Sunday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )

    [Monday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )

    [Tuesday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )

    [Wednesday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )

    [Thursday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )

    [Friday] => Array
    (
        [11:00am] => 0
        [12:00pm] => 0
        [1:00pm] => 0
        [2:00pm] => 0
        [3:00pm] => 0
        [4:00pm] => 0
        [5:00pm] => 0
    )
)

and makes this html table:

<table border="1">
    <tbody>
        <tr>
            <th>
                Saturday November 15th
            </th>
            <th>
                Sunday November 16th
            </th>
            <th>
                Monday November 17th
            </th>
            <th>
                Tuesday November 18th
            </th>
            <th>
                Wednesday November 19th
            </th>
            <th>
                Thursday November 20th
            </th>
            <th>
                Friday November 21st
            </th>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="0">
                11:00am
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="1">
                12:00pm
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="2">
                1:00pm
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="3">
                2:00pm
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="4">
                3:00pm
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="5">
                4:00pm
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
            <td>
                <input type="checkbox" name="datetime" id="datetime" value="6">
                5:00pm
            </td>
        </tr>
    </tbody>
</table>

What I am trying to do is put the heading date as the checkbox value. Is this possible with this code?

解决方案

First of all you are going to want to change your $datesAvailableArray so that it contains an actual dates. ISO 8601 strings are an excellent format.

$datesAvailableArray = array(
    'Saturday' => array(
        '2014-11-14T11:00:00Z',
        '2014-11-14T12:00:00Z',
        '2014-11-14T13:00:00Z',
        '2014-11-14T14:00:00Z'
    ),
    'Sunday' => array(
        '2014-11-15T11:00:00Z',
        '2014-11-15T12:00:00Z',
        '2014-11-15T13:00:00Z',
        '2014-11-15T14:00:00Z'
    )
);

Now that we have date strings we can create DateTime objects that we use to format the date:

$saturday_1100 = DateTimeImmutable::createFromFormat(DateTime::ISO8601, '2014-11-14T11:00:00Z');
$saturday_1100->format('g:ia'); // 11:00am

In our case we are using the DateTimeImmutable class since we don't want to change the dates after they are created.

So lets change our makeTable function to use our new friend DateTimeImmutable:

function makeTable($data) {

    $headers = array_map(function($a) {
        return "<th>$a</th>";
    }, array_keys($data));

    $max_indice = max( array_map(function($day) {
        return count($day) - 1;
    }, $data) );

    // Create a new array where we group by hour
    $rows = array_map(function($i) use ($data) {
        // create each hour
        return '<tr>' . join( array_map(function($day) use ($i){
            $ts = isset($day[$i]) ? DateTimeImmutable::createFromFormat(DateTime::ISO8601, $day[$i]) : null;
            if ($ts){
                $label = '<label for="datetime">'.$ts->format('g:ia').'</label>';
                $input = vsprintf ( 
                    '<input type="checkbox" name="datetime" id="%s" value="%s" />',
                    array(
                        'datetime_'. $ts->getTimestamp(), // ID
                        $ts->format('c')  // Value
                    )
                );
                return '<td>' . $label . $input . '<td>';
            } else {
                return '<td></td>';
            }
        }, $data)) . '</tr>';
    }, range(0, $max_indice));

    // Don´t get rid of the thead element. 
    // It tells the browser that your table is a real table containing data and not just a crappy layout.
    return "
    <table>
        <caption>My Table</caption>
        <thead>".join($headers,'\n')."</thead>
        <tbody>".join($rows, '\n')."</tbody>
    </table>";
}

echo makeTable( $datesAvailableArray ); Will give us something like this:

<table>
  <caption>
    My Table
  </caption>

  <thead>
    <tr>
      <th>Saturday</th>
      <th>Sunday</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><label for="datetime">11:00am</label><input type="checkbox" name="datetime" id="datetime_1415962800" value="2014-11-14T11:00:00+00:00" /></td>
      <td><label for="datetime">11:00am</label><input type="checkbox" name="datetime" id="datetime_1416049200" value="2014-11-15T11:00:00+00:00" /></td>
    </tr>
    <tr>
      <td><label for="datetime">12:00pm</label><input type="checkbox" name="datetime" id="datetime_1415966400" value="2014-11-14T12:00:00+00:00" /></td>
      <td><label for="datetime">12:00pm</label><input type="checkbox" name="datetime" id="datetime_1416052800" value="2014-11-15T12:00:00+00:00" /></td>
    </tr>
    <!-- MORE ... -->
  </tbody>
</table>

Summary:

We have unique values for the input id. The value that we send when posting this form is a ISO-8601 date string. We also have wrapped our hour text in <label> tags with a for attribute which is good for accessibility.

这篇关于带有复选框值的PHP问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆