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变量来允许我在编号索引中获取它?为什么它只向我显示第十个?
你可能只想要这个:
$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开始就可以使用.