PHP:无法正确地将数组添加到数组中

时间:2015-08-22 17:18:06

标签: php arrays multidimensional-array

我正在创建新数组,然后将这些数组添加到“父母”中。阵列。每个新阵列代表星期日到星期六的一天。每一天都是一个数组本身,我试图保留当天的名称作为关键。这是我目前得到的输出(从Chrome复制):

array(3) {
  ["active"]=>
  string(0) ""
  ["start"]=>
  int(1440219600)
  ["end"]=>
  int(1440221400)
}
array(8) {
  ["Sunday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["Monday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["Tuesday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["Wednesday"]=>
  array(3) {
    ["active"]=>
    string(3) "yes"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["Thursday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["Friday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["Saturday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
  ["exceptional_days"]=>
  array(3) {
    ["active"]=>
    string(0) ""
    ["start"]=>
    int(1440219600)
    ["end"]=>
    int(1440221400)
  }
}

如您所见,Sunday不是第一个数组的关键,而是第二个数组的关键。特殊的日子'应该是空的。

这是我的代码:

$newWorkerSchedule = array();
$keys = array_keys($workerSchedule);
for($i = 0; $i < count($workerSchedule); $i++) {
    if (is_array($workerSchedule[$keys[$i]])) {
        $oldStart = $workerSchedule[$keys[$i]]['start'];
        $oldEnd = $workerSchedule[$keys[$i]]['end'];
        if($oldEnd == '00:00') {
            $oldEnd = '23:59';
        }
        $oldStart = strtotime($oldStart);
        $oldEnd = strtotime($oldEnd);
        $newStart = strtotime('+' . $timeZoneDiffHours . ' hours', $oldStart);
        $newEnd = strtotime('+' . $timeZoneDiffHours . ' hours', $oldEnd);
        $dayStart = strtotime('00:00');
        $dayEnd = strtotime('23:59');
        $timeSlotArray = array('active'=>$workerSchedule[$keys[$i]]['active'],'start'=>$newStart,'end'=>$newEnd);
        $newWorkerSchedule[$keys[$i]] = $timeSlotArray;
    }
}

为什么在开始时会创建一个额外的数组?

编辑:根据要求,$ workerSchedule数组:

array(8) {
  ["Sunday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["Monday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["Tuesday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["Wednesday"]=>
  array(3) {
    ["active"]=>
    string(3) "yes"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["Thursday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["Friday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["Saturday"]=>
  array(3) {
    ["active"]=>
    string(2) "no"
    ["start"]=>
    string(5) "00:00"
    ["end"]=>
    string(5) "00:30"
  }
  ["exceptional_days"]=>
  string(0) ""
}

1 个答案:

答案 0 :(得分:0)

正在创建它,因为您在$workerSchedule数组上拥有它。因此,您应该检查var_dump($workerShedule)

的结果

快速解决问题的方法是从i=1而不是i=0开始循环。

但是,您应该总是喜欢使用简单的foreach,它会让您的代码更具可读性,因为您不需要一直致电keys[$i] ......例如。< / p>

foreach ($array as $key => $value)