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

时间:2013-06-06 17:03:17

标签: php arrays foreach

我现在有这个代码,它获取日期和时间。我想创建一种带编号的索引,因为我在一个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变量来允许我在编号索引中获取它?为什么它只向我展示了第十个?

2 个答案:

答案 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;
        )
    );
}