将++数字变量设置为数组键

Jes*_*son 2 php arrays foreach

我现在有这个代码,它获取日期和时间.我想创建一种带编号的索引,因为我在一个foreach循环中返回了大约10个日期和时间.它在一个函数中,我需要返回此数组以在其他地方执行某些操作.

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

我希望它看起来更像这样

Array (
    [0] => Array (
        [date] => whatever date
        [time] => whatever time
    )
    [1] => Array (
        [date] => whatever date
        [time] => whatever time
    )
    [2] .. etc
)
Run Code Online (Sandbox Code Playgroud)

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

Array (
        [10] => Array (
            [date] => whatever date
            [time] => whatever time
        )
Run Code Online (Sandbox Code Playgroud)

它只打印在一个/只给我十分之一.我如何让它继续使用$ i变量来允许我在编号索引中获取它?为什么它只向我显示第十个?

rai*_*7ow 6

你可能只想要这个:

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

首先,没有[],您只需$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);
Run Code Online (Sandbox Code Playgroud)

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

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