如何使用PHP轻松地将数组中的每个项目相乘?

时间:2010-04-17 21:30:13

标签: php arrays

我有一个名为$times的数组。它是一个小数字列表(15,14,11,9,3,2)。这些将是用户提交的,应该是几分钟。由于PHP时间在几秒钟内工作,我想将我的数组的每个元素乘以60。

我一直在玩array_walkarray_map,但我无法让那些人工作。

6 个答案:

答案 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

http://php.net/manual/en/function.array-product.php