我现在有这个代码,它获取日期和时间。我想创建一种带编号的索引,因为我在一个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
)
它只打印在一个/只给我十分之一。我如何让它继续使用$ i变量来允许我在编号索引中获取它?为什么它只向我展示了第十个?
答案 0 :(得分:6)
你可能只想要这个:
$new_data = array();
foreach ($data as $value) {
$new_data[] = array (
"date"=> $value->DATE;
"time" => $value->TIME;
);
}
首先,没有[]
,您只需在每次迭代时为$new_data
变量分配一个新值。有了它,您可以在每一步将 new 元素附加到数组中;这显然是在这种情况下应该做的事情。
其次,在这种情况下你不必使用另一个变量:索引从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开始就可以使用。
答案 1 :(得分:1)
$i = 0;
foreach ($data as $key =>$value) {
$new_data[$i++] = array (
"date"=> $value->DATE;
"time" => $value->TIME;
)
);
}