我有一个名为$times
的数组。它是一个小数字列表(15,14,11,9,3,2
)。这些将是用户提交的,应该是几分钟。由于PHP时间在几秒钟内工作,我想将我的数组的每个元素乘以60。
我一直在玩array_walk
和array_map
,但我无法让那些人工作。
答案 0 :(得分:23)
您可以使用array_map:
array_map()在将回调函数应用于每个元素之后返回包含arr1的所有元素的数组。回调函数接受的参数数量应与传递给array_map()
的数组数相匹配
回调的lambda函数示例:
array_map(function($el) { return $el * 60; }, $input);
PHP< 5.3
array_map(create_function('$el', 'return $el * 60;'), $input);
或使用bcmul
进行回叫
array_map('bcmul', $input, array_fill(0, count($input), 60));
但是,使用foreach
也没有错。
答案 1 :(得分:7)
使用foreach
语句对数组进行迭代并乘以:
foreach ($times as $value) {
$new_times[] = $value * 60;
}
答案 2 :(得分:6)
在您的情况下,您可能希望使用foreach来简化:
foreach( $times as &$val ){ $val *= 60; }
我假设你的数组的值是你想要的数字,而不是键。由于上面的解决方案使用引用,它也会改变你的原始数组 - 但是当你以前瞄准array_map
时,我认为你想要它。
上面的解决方案可能更容易理解,并且最有可能比使用array_map更快(显然)必须为每个元素调用一个函数。 我只使用array_map来处理更复杂的事情,例如高级排序算法等等,但绝对不会像这样简单。
答案 3 :(得分:3)
我个人赞成戈登的建议,只是使用lambda(或创建)函数,并执行以下操作:
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(我可以方便使用)也可能是危险的,如果你不仔细使用它...然后维护可能会变得令人生畏(因为你必须记住每次都处理它你在那个代码上工作)。如果你没有理由在这个阶段进行优化(IE你的应用程序没有速度问题),不要现在就做,不要担心使用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] =&gt; 60 [1] =&gt; 120 [2] =&gt; 180 )
阵 ( [0] =&gt; 60 [1] =&gt; 120 [2] =&gt; 120 )
可能不是你对第二个周期的预期。 这就是为什么我通常会避免使用foreach&amp;我可以用byref组合。
答案 4 :(得分:2)
array_walk($myArray, function(&$v) {$v *= 60;});
答案 5 :(得分:1)
从PHP 5.1开始,有一个名为array_product()
的函数。您可以使用它。
$mul = array_product([1, 2, 3]);
echo $mul; // 6