0

フォームに投稿された属性から次の配列形式を実現しようとしています:

$schedule = array(
    'Mon'=>array('09:00','17:00','16:00','15:00','14:00','13:00','12:00','11:00','10:00'),
    'Tue'=>array('17:00','16:00','15:00','14:00','13:00','12:00','11:00','10:00','09:00'),
    'Wed'=>array('17:00','16:00','15:00','14:00','13:00','12:00','11:00','10:00','09:00'),
    'Thu'=>array('12:00','11:00','10:00','09:00'),
    'Fri'=>array('09:00'),
    'Sat'=>array('17:00','16:00','15:00','14:00','13:00','12:30','11:00','10:00','09:30'),
    'Sun'=>array('17:00','16:00','15:00','14:00','13:00','12:00','11:00','10:00','09:00')
);

私のフォームでは、各日の時間と分を選択するための個別の時間と分の選択ボックスがあります(表示に関しては、タブにあります)。

<div class="controls">
<select name="schedule_hour[0][]" class="input-mini">
    <option value="-1">--</option>
    <option value="00">00</option>
    <option value="01">01</option>
    <option value="02">02</option>
    etc.
</select>
<select name="schedule_minute[0][]" class="input-mini">
<option value="-1">--</option>
<option selected="selected" value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
etc.
</select>
</div>

ここで、schedule_minute[0][] は月曜日の分の配列になります。火曜日は schedule_minute[2][] などになります。

私が持っている限り、私はこれを持っています:

for($i = 0; $i < 7; $i++) {
    print_r(array(date('D', strtotime("Monday +{$i} days")), array_combine($_POST['schedule_hour'][$i], $_POST['schedule_minute'][$i])));
}

これは私を近づけますが、それでも正しくありません。上記の戻り値:

Array
(
[0] => Mon
[1] => Array
    (
        [09] => 00
        [10] => 00
        [11] => 00
        [12] => 00
        [13] => 00
        [14] => 00
        [15] => 00
        [16] => 00
        [17] => 00
    )

)

アイデアは、配列をシリアル化してデータベースに保存することです。しかし、最初に正しい形式の構造が必要です。

助けてください。

4

2 に答える 2

1

必要なすべてのチェックを含むコードは次のとおりです。

$result = array();
for ($i = 0; $i < 7; ++$i) {
    if (isset($_POST['schedule_hour'][$i], $_POST['schedule_minute'][$i])
        && is_array($_POST['schedule_hour'][$i])
        && is_array($_POST['schedule_minute'][$i])
        && ($count = count($_POST['schedule_hour'][$i]))
        && ($count === count($_POST['schedule_minute'][$i]))
    ) {
        $add = array();
        foreach ($_POST['schedule_hour'][$i] as $k => $hour) {
            if (!isset($_POST['schedule_minute'][$i][$k])) {
                continue;
            }
            $hour = (int) $hour;
            $minute = (int) $_POST['schedule_minute'][$i][$k];
            if (($hour >= 0) && ($hour <= 23)
                && ($minute >=0) && ($minute <= 59)
            ) {
                $add[] = str_pad($hour, 2, '0', STR_PAD_LEFT) . ':' . str_pad($minute, 2, '0', STR_PAD_LEFT);
            }
        }
        if ($add) {
            $result[date('D', strtotime("Monday +{$i} days"))] = $add;
        }
    }
}

次の値があると仮定します。

$_POST['schedule_hour'] = array(
    0 => array(2, 10, 12, 13, 26),
    3 => array(11, 12, ),
);

$_POST['schedule_minute'] = array(
    0 => array(5, 15, 25, 35, 61),
    3 => array(40, 50, ),
);

$result は以下を保存します:

array(2) {
  ["Mon"]=>
  array(4) {
    [0]=>
    string(5) "02:05"
    [1]=>
    string(5) "10:15"
    [2]=>
    string(5) "12:25"
    [3]=>
    string(5) "13:35"
  }
  ["Thu"]=>
  array(2) {
    [0]=>
    string(5) "11:40"
    [1]=>
    string(5) "12:50"
  }
}
于 2013-07-08T14:38:49.137 に答える
0

array_combine の代わりに、次のようなことをする必要があります...

  $times = array();
  for($x = 0; $x< count($_POST['schedule_hour'][$i]); $x++){
      $times[] = $_POST['schedule_hour'][$i][$x].":".
                 $_POST['schedule_minute'][$i][$x];
  }

したがって、コードは次のようになります。

for($i = 0; $i < 7; $i++) {
    $times = array();
    for($x = 0; $x< count($_POST['schedule_hour'][$i]); $x++){
        $times[] = $_POST['schedule_hour'][$i][$x].":".
                   $_POST['schedule_minute'][$i][$x];
    }
    print_r(array(date('D', strtotime("Monday +{$i} days"))=>$times); 
}
于 2013-07-08T14:28:28.810 に答える