【问题标题】:Php array subtract values [closed]PHP数组减去值[关闭]
【发布时间】:2016-07-24 11:57:02
【问题描述】:

我有以下数组:

array(50,6,8,9)

我想减去数组上的所有值

结果必须是:(50-6-8-9=equals):

27

类似于array_sum 但不一样!

【问题讨论】:

  • 您需要编写自己的函数来执行此操作

标签: php arrays math subtraction


【解决方案1】:

我知道 OP 已经有一个解决方案,但我想添加一个使用 foreach-loop 而不是 for-loop 的函数,以防数组有一些时髦的键(这将创建错误结果并生成 PHP 通知)。

function array_subtract(array $input) {
    $result = reset($input);                            // First element of the array
    foreach (array_slice($input, 1) as $value) {        // Use array_slice to avoid subtracting the first element twice
        $result -= $value;                          // Subtract the value
    }
    return $result;                                // Return the result
}

这与其他答案中的功能相同,但更可靠,因为它不关心数组中的键是什么。

$array = ["one" => 50, "two" => 6, 8, 9];
echo array_subtract($array);    // Outputs 27

如果您将上面的示例数组与for-loop 一起使用,您会收到“Undefined offset X in..”的通知,并且会返回错误的结果。

也可以简化为使用原生的array_* 函数。 array_shift() 获取数组的第一个元素,并将其从数组中删除。 array_sum() 对数组的其余部分求和。减去这两个,你会得到相同的结果。

function array_subtract(array $input) {
    return array_shift($input) - array_sum($input);
}

【讨论】:

    【解决方案2】:

    首先您必须对数组进行排序,以确保最大的数字是数组中的最后一个(否则它将不起作用,结果将不正确)。将结果的起始值设置为数组的最后一个(最高)数字,然后遍历所有数字并从最高数字中减去所有数字。

    $arr = array(50,6,8,9); 
    $arr_len = count($arr)-1;
    
    sort($arr);
    
    $result = $arr[$arr_len];
    for ($i = $arr_len-1; $i >= 0; $i--) {
        $result -= $arr[$i];
    } 
    echo $result;
    

    如果您想减去所有值(无论哪个最高),请使用以下代码:

    $arr = array(50,6,8,9); 
    $result = $arr[0];
    for ($i = 1; $i < count($arr); $i++) {
        $result -= $arr[$i];
    } 
    echo $result;
    

    【讨论】:

    • OP 没有指定他想要对值进行排序。
    • 是的,但这不起作用,...我给了他两种解决方案,他可以使用他需要的一种。感谢您让我知道@Tom
    • 为什么@Aleksandar 不起作用?负数并不违法或什么的......
    【解决方案3】:

    你去吧:一个简单的循环遍历数组并减去值

    $arr = [50, 6, 8, 9];
    
    function array_subtract(array $arr){
        $subtraction = $arr[0];
        for ($i = 1; $i < count($arr); $i++) {
            $subtraction -= $arr[$i];
        }
        return $subtraction;
    }
    
    $val = array_subtract($arr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多