我有一个名为$times
的数组。它是一列小数(15,14,11,9,3,2
),这些将由用户提交,并且应该是分钟数。由于PHP时间按秒计算,我想通过60来乘以数组中的每个元素。
我已经尝试使用array_walk
和array_map
进行操作,但我无法使其工作。
我有一个名为$times
的数组。它是一列小数(15,14,11,9,3,2
),这些将由用户提交,并且应该是分钟数。由于PHP时间按秒计算,我想通过60来乘以数组中的每个元素。
我已经尝试使用array_walk
和array_map
进行操作,但我无法使其工作。
array_map(function($el) { return $el * 60; }, $input);
array_map(create_function('$el', 'return $el * 60;'), $input);
bcmul
进行回调。array_map('bcmul', $input, array_fill(0, count($input), 60));
foreach
也没有任何问题。array_map
返回修改后的数组是错误的,在您的示例中,您必须执行 $input = array_map...
否则它不会修改 $input。这时应该使用 array_walk
。 - DrLightman使用 foreach
循环遍历数组并进行乘法操作:
foreach ($times as $value) {
$new_times[] = $value * 60;
}
您可以在这种情况下使用foreach来简化代码:
foreach( $times as &$val ){ $val *= 60; }
array_map
,我认为您是想要这样。该解决方案可能比使用array_map
更易于理解,而且很可能更快,因为后者显然必须为每个元素调用一个函数。对于更复杂的事情,比如高级排序算法等,我会使用array_map,但绝不会用于像这样琐碎的事情。array_map(function($el) { return $el * 60; }, $input_array);
(PHP >= 5.3) 或者
array_map(create_function('$el', 'return $el * 60;'), $input_array);
(PHP < 5.3)
毫无疑问,我认为没有复制数组的理由(如果涉及大量值,则可能变得麻烦);此外,请注意,使用foreach(我也认为很方便)如果您不小心使用它也可能很危险...然后维护工作无论如何都会变得艰巨(因为每次处理代码时都必须记得处理它)。如果您在这个阶段没有优化的理由(即您的应用程序没有速度问题),则现在不要这样做,并且不要担心使用array_map。您现在可以考虑维护易用性,稍后再进行优化,以防您真的需要。
实际上,如果您按引用方式操作,然后再次使用foreach,您可能会遇到意外结果(请参见下面的示例...)
$a=array('1','2','3');
foreach ($a as &$v) {
$v *= 60;
}
print_r($a);
foreach ($a as $v);
print_r($a);
输出结果为:
数组 ( [0] => 60 [1] => 120 [2] => 180 )
数组 ( [0] => 60 [1] => 120 [2] => 120 )
第二次循环的结果可能不是您所期望的。 这就是为什么我通常尽可能避免使用foreach和byref组合的原因。
array_map
返回的值分配给一个变量来保存修改后的值。如果你想要重复使用同一个 $input_array
,可以将其赋值为 array_map...
。 - DrLightman