[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с формулой расчета в массивах
benkerrry
Есть значения $a и $b, нужно высчитать сумму со следующих значений массива пока $b не будет = 0 или не будет ровна следующему значению.
к примеру
$a = 1;
$b = 1900;
400+600+800=1800 (оставшиеся 100 не хватает на следующее значаение, значит скрипт переходит к подсчету)
$c = 4 (чтобы получить значение 5 не хватает 100, поэтому $ будет 4)

$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";
Подскажите как составить саму формулу получения значения $c?
walerus
Цитата
Есть значения $a и $b, нужно высчитать сумму со следующих значений массива
назревает вопрос - какого массива? у него есть структура и имя?
Цитата
пока $b не будет = 0
судя по примеру:
Цитата
$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";
нуля не будет никогда, т.к. все прибавляется...
и так, что же нужно сделать то?
walerus
еще не понятно, это как?:
$a = 1;
$b = 1900;

$a - минимальное значение будущей "суммы", $b - максимальное число, ДО которого ведется сложение чисел.

400+600+800=1800 - эти цифры от куда?, если от сюда
$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";
то пример не правильный, потому как:

т.к. $a у нас равна 1, то не забываем ее прибавлять, или для чего она вообще?

1 + 200(201) + 400(601) + 600(1201 !!! уже) - следующее прибавление значения 800, перевалит за максимум $b(1900) т.к. будет равна = 1201 + 800 === 2001, что противоречит правилу, либо же $a указывает с какой позиции в массиве начинать подсчет?.
benkerrry
$a - это можно сказать так $names[$a]
$c - это цифра нового значения $names[$a], после подсчета значений в кавычках
мне нужно чтобы формула брала значения $a находила нужное значение в $names[] и высчитывала сумму "значений в кавычках" и сравнивала с $b
walerus
Нда... постановка задачи на "уровне" )))

есть массив:
$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";


есть значения:
$a = 1; // Это стартовая ячейка/позиция в массиве, от которой вести подсчет суммы
$b = 1900; // Это максимальное значение, выше которого сумма не должна превышать.
$c = ''; // Это искомое значение, которое будет являться позицией в массиве $names, при прибавлении значения которой, будет превышать наше условие.

$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";

$a = 1;
$b = 1900;
$c = '';

$tmp_summ = 0;
$tmp_string = '';
foreach( $names as $names_key => $names_value )
{
if ( $names_key < $a ) continue; // Пропускаем все что меньше или равно минимальному значению

$tmp_string[] = $names_value;
$tmp_summ = $tmp_summ + $names_value;

## Проверяем наше условие
if ( isset( $names[$names_key+1] ) )
{
if ( ( $tmp_summ + $names[$names_key+1] ) >= $b )
{
## останавливаемся и выводим результат
echo "Действия: ". implode( "+", $tmp_string ) . " = " . array_sum( $tmp_string ) . "<br>\n";

$c = $names_key+1;
echo "\$a = " . $a . "<br>\n";
echo "\$b = " . $b . "<br>\n";
echo "\$c = " . $c . "<br>\n";
echo "delta = " . ( $b - $tmp_summ ). "<br>\n";
die;
}
}

else
$c = $names_key;
}

echo "Действия: ". implode( "+", $tmp_string ) . " = " . array_sum( $tmp_string ) . "<br>\n";
echo "\$a = " . $a . "<br>\n";
echo "\$b = " . $b . "<br>\n";
echo "\$c = " . $c . "<br>\n";
Результат
Действия: 400+600+800 = 1800
$a = 1
$b = 1900
$c = 4
delta = 100
Если допустим указать Больше значение $b, например:

$b = 2900;, то результат будет таким
Действия: 400+600+800+1000 = 2800
$a = 1
$b = 2900
$c = 4
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.