Php 数组相减值
Php array subtract values
我有以下数组:
array(50,6,8,9)
我想减去数组中的所有值
结果必须是:(50-6-8-9=等于):
27
类似于 array_sum
但不同于 !
首先你必须对数组进行排序,只是为了确保最大的数字是数组中的最后一个(否则它不会工作,结果不会正确)。将结果的起始值设置为数组的最后一个(最高)数字,然后遍历所有数字并从最高数字中减去所有数字。
$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;
好了:一个遍历数组并减去值的简单循环
$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);
我知道 OP 已经有了解决方案,但我想添加一个使用 foreach
循环而不是 for
循环的函数,以防数组有一些时髦的键(这将创建一个错误的结果并生成 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
循环一起使用,您会收到“未定义的偏移量 X in..” 通知,并且它会 return 一个错误的结果。
也可以简化为使用原生array_*
函数。 array_shift()
获取数组的第一个元素,并将其从数组中移除。 array_sum()
对数组的剩余部分求和。减去这两个,你会得到相同的结果。
function array_subtract(array $input) {
return array_shift($input) - array_sum($input);
}
- 现场演示在 https://3v4l.org/S0nDD
我有以下数组:
array(50,6,8,9)
我想减去数组中的所有值
结果必须是:(50-6-8-9=等于):
27
类似于 array_sum
但不同于 !
首先你必须对数组进行排序,只是为了确保最大的数字是数组中的最后一个(否则它不会工作,结果不会正确)。将结果的起始值设置为数组的最后一个(最高)数字,然后遍历所有数字并从最高数字中减去所有数字。
$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;
好了:一个遍历数组并减去值的简单循环
$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);
我知道 OP 已经有了解决方案,但我想添加一个使用 foreach
循环而不是 for
循环的函数,以防数组有一些时髦的键(这将创建一个错误的结果并生成 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
循环一起使用,您会收到“未定义的偏移量 X in..” 通知,并且它会 return 一个错误的结果。
也可以简化为使用原生array_*
函数。 array_shift()
获取数组的第一个元素,并将其从数组中移除。 array_sum()
对数组的剩余部分求和。减去这两个,你会得到相同的结果。
function array_subtract(array $input) {
return array_shift($input) - array_sum($input);
}
- 现场演示在 https://3v4l.org/S0nDD