2

我现在有这个代码,它获取日期和时间。我想创建一种编号索引,因为我在那个 foreach 循环中返回了大约 10 个日期和时间。它在一个函数中,我需要返回这个数组以在其他地方使用它。

$i = 0;
    foreach ($data as $key =>$value) {
        $new_data = array (
            $i => array (
                "date"=> $value->DATE,
                "time"=> $value->TIME,
            )
        );
        $i++;
    }

我希望它看起来更像这样

Array (
    [0] => Array (
        [date] => whatever date
        [time] => whatever time
    )
    [1] => Array (
        [date] => whatever date
        [time] => whatever time
    )
    [2] .. etc
)

事实证明这不是我得到的。我明白了。

Array (
        [10] => Array (
            [date] => whatever date
            [time] => whatever time
        )

它只打印出一个/只给我第十个。我如何让它继续 ++ing $i 变量以允许我在编号索引中获取它?为什么它只显示第十个?

4

2 回答 2

6

你可能只想要这个:

$new_data = array();
foreach ($data as $value) {
    $new_data[] = array (
        "date"=> $value->DATE;
        "time" => $value->TIME;
    );
}

首先,没有,您只需在每次迭代时[]为变量分配一个新值。$new_data有了它,您可以在每一步向数组添加一个新元素;这显然是在这种情况下应该做的。

其次,在这种情况下,您不必使用另一个变量:索引从 0 开始,并且随着每个新的[]增加,它应该是。

最后(感谢@reformed 在评论中提到这一点),foreach如果您实际上不使用数组的键,则不必编写长格式。foreach $arr as $val足够了。


在我看来,这可以用array_map更简洁地重写:

$new_data = array_map(function($val) { return array(
  'date' => $val->DATE,
  'time' => $val->TIME
); }, $data);

当想要基于另一个数组创建一个普通数组并且这个新数组的每个元素都以某种方式基于原始集合的相应元素时,这个函数通常非常合适。

我在这里使用了一个匿名函数作为 的参数array_map,它从 PHP 5.3 开始可用。

于 2013-06-06T17:05:22.657 回答
1
$i = 0;
foreach ($data as $key =>$value) {
    $new_data[$i++] = array (
            "date"=> $value->DATE;
            "time" => $value->TIME;
        )
    );
}
于 2013-06-06T17:05:09.713 回答