繁体   English   中英

PHP - 如何计算数组中每个值的百分比

[英]PHP - how count percent of each value in array

在 PHP 中,我有一个数组:

$a = array(10, 15, 20, 25, 30);

我想为数组$a每个元素添加 5%,使其看起来像这样:

$a = array(10.5, 15.75, 21, 26.25, 31.5);

我不想使用foreach

使用array_map()

$a = array(10, 15, 20, 25, 30);
$a = array_map(function($value) { return $value * 1.05; }, $a);

给出: array(10.5, 15.75, 21, 26.25, 31.5);

试试这个

<?php 
$a = array(10, 15, 20, 25, 30);;

$output = array_map(function($val) { return $val + ($val*5/100); }, $a);

print_r($output);

    ?>

输出 :-

Array
(
    [0] => 10.5
    [1] => 15.75
    [2] => 21
    [3] => 26.25
    [4] => 31.5
)

array_map 函数应该是您正在寻找的解决方案(此处文档)。

我想你必须创建一个这样的函数:

function fivePercent($n)
{
    return($n * 1.05);
}

并使用 array_map 在数组中的每个数字上调用它:

$b = array_map("fivePercent", $a);

编辑: 这里的工作代码。

编辑2:根据这里答案,使用foreach更快,但是由于您要求不使用它,因此调用命名函数比在array_map调用中编写函数要快得多。 无论如何,对于小数组都没有关系,当你有很多数字要处理时考虑一下。

这是您的自定义功能,

$arr = array_map(function($i){
        return $i+($i*0.05);
    }, $arr);
    print_r($arr);

这是工作代码

array_map — 将回调应用于给定数组的元素

function myfunction($num)
{
  return($num + ($num * .05));
}

$a=array(10, 15, 20, 25, 30);
print_r(array_map("myfunction",$a));

输出:

Array ( [0] => 10.5 [1] => 15.75 [2] => 21 [3] => 26.25 [4] => 31.5 )

使用php的Array_map函数

$a = array(10, 15, 20, 25, 30);
$arrReturn = array_map("increment", $a);
print_r($arrReturn);

function increment($n){
    $return = $n + ($n * .5);
    return $return;
}

当然,语言构造可用于循环数组,并且正如其他几个答案所证明的那样, array_map()可以完成这项工作,但是当您想将用户函数应用于数组中的每个元素时,这就是array_walk()是专为。 这些值在迭代时被“通过引用修改”,而不是创建一个全新的数组,然后用新的返回数组覆盖旧数据。

使用乘法赋值运算符将 5% 提升应用于遇到的每个值。

代码:(演示

function fivePercentIncrease(&$value) {
    $value *= 1.05;
}

$a = [10, 15, 20, 25, 30];

array_walk($a, 'fivePercentIncrease');

var_export($a);

或通过匿名函数:(演示

$a = [10, 15, 20, 25, 30];

array_walk($a, function(&$value) { $value *= 1.05; });

var_export($a);

或者通过匿名函数使用 PHP7.4 的箭头函数语法:( Demo )

$a = [10, 15, 20, 25, 30];

array_walk($a, fn(&$value) => $value *= 1.05);

var_export($a);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM