У меня есть следующий массив:
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;
Я знаю, что у ОП уже есть решение, но я хотел бы добавить функцию, которая использует foreach
петля вместо 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
петля, ты получишьНеопределенное смещение X в .. « заметит, и это вернет неправильный результат.
Вот и все: простой цикл, который перебирает массив и вычитает значения
$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);