取消设置数组中的键后非法偏移


Illegal offset after unsetting a key in an array?

我有一个数组$data_list其中包含一个元素date_time,其中包含以下格式的数据:

[0]=>
  array(2) {
    ["date_time"]=>
    string(19) "2014-11-14 09:30:03"
    ["follower_count"]=>
    string(4) "1567"
  }

事实上,这是$data_list的全部数据 http://pastebin.com/wA7f9Aet:

我想将date_time元素一分为二,所以它看起来像这样:

[0]=>
      array(2) {
        ["date"]=>
        string(19) "2014-11-14"
        ["date"]=>
        string(5) "09:02"
        ["follower_count"]=>
        string(4) "1567"
      }

请注意,date_time元素已拆分,时间部分也已缩短为HH:MM

我有以下循环来遍历我的数组$data_list并列出了每行应该做什么。

foreach ($data_list as &$data) {
        $datetime = new DateTime($data['date_time']); // creates new var
        $date = $datetime->format('Y-m-d'); // formats the date portion
        $time = $datetime->format('H:i'); // formats the time portion
        unset($data['date_time']); // Removes the old date_time element
        array_push($data_list,$time); // adds new time element
        array_push($data_list,$date); // adds new date element
    }
  1. 循环访问$data_list调用每个数组元素$data
  2. 创建一个新的变量 $datetime
  3. 仅设置此部分的日期的格式
  4. 格式化只是这部分的时间
  5. 删除旧的$date_time元素
  6. 添加新的$time元素
  7. 添加 ne $date元素

这在array_push行之前工作正常。我不知道为什么。我收到以下错误:

警告:第 70 行的/应用程序/MAMP/路径中的非法字符串偏移量"date_time"

致命错误:未捕获的异常"异常",消息为"日期时间::__construct():无法在位置 0 (0) 解析时间字符串 (0):

我无法弄清楚为什么它会在array_push部分倒下。在我看来,它试图调用现在未设置的date_time元素,但为什么呢?

添加了检测数组确切索引的$key,以便您可以将datetime推送到同一index

foreach ($data_list as $key=>&$data) {
    $datetime = new DateTime($data['date_time']); // creates new var
    $date = $datetime->format('Y-m-d'); // formats the date portion
    $time = $datetime->format('H:i'); // formats the time portion
    unset($data['date_time']); // Removes the old date_time element
    array_push($data_list[$key],$time); // adds new time element
    array_push($data_list[$key],$date); // adds new date element
}