Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не выводится максимальное значение массива
Форумы портала PHP.SU » » Если скрипт не работает » Не выводится максимальное значение массива

Страниц (1): [1]
 

1. armancho7777777 - 18 Декабря, 2011 - 16:05:04 - перейти к сообщению
Всем привет!
Вот код:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $fileS['discounts'] = array(
  4.                            array('amount' => 5000, 'percent' => 5),
  5.                            array('amount' => 3000, 'percent' => 3),
  6.                            array('amount' => 7000, 'percent' => 7),
  7.                            array('amount' => 3000, 'percent' => 3)
  8.                            );
  9.        
  10.  
  11. $percent = 0;  
  12. $sum = 10000;
  13.  
  14. foreach($fileS['discounts'] as $v) {
  15.  
  16.         if($sum >= $v['amount']) {
  17.                
  18.                 $sum = $v['amount'];
  19.                 $percent = $v['percent'];
  20.                
  21.         }
  22.  
  23. }
  24.  
  25.  
  26. echo $sum." - ".$percent;
  27.  
  28.  



Почему переменная $sum перезаписывается один раз?
По идее, она должна перезаписываться каждый раз, когда $sum >= $v['amount']
В чём проблема?
2. cHameleon - 18 Декабря, 2011 - 16:30:16 - перейти к сообщению
А с чего вы решили, что только один раз? в конце выводится лишь последний вариант: 3000 - 3... ведь в массиве нет числа больше, чем указанно в переменной $sum.
3. OrmaJever - 18 Декабря, 2011 - 16:43:58 - перейти к сообщению
armancho7777777 пишет:
По идее, она должна перезаписываться каждый раз, когда $sum >= $v['amount']

Ну да, только это условие всегда false, как уже сказали нету числа из масива больше $sum поэтому это условие вобще не выполняется. А по скольку оно не выполняется то вывести должно
4. cHameleon - 18 Декабря, 2011 - 17:17:31 - перейти к сообщению
Почему всегда false то?) если наоборот, всегда true! и условие выполняется всегда.
выражение: $sum {больше либо равно} $v['amount']
5. Slesher - 18 Декабря, 2011 - 17:54:34 - перейти к сообщению
armancho7777777, она и перезаписывается 4 раза, просто у вас 3000 - это последнее значение. Попробуйте сменить порядок записей в масиве.
6. armancho7777777 - 18 Декабря, 2011 - 19:22:12 - перейти к сообщению
Вообще, было ещё это:



... но убрал, так как я думаю над реализацией именно подобного варианта.
Почему-то кажется, что не совсем надёжное выражение получатся)
Мне надо получить наибольшее число из наименьших 10000.
7. Champion - 18 Декабря, 2011 - 19:27:17 - перейти к сообщению
armancho7777777 пишет:
Не выводится максимальное значение массива
В коде ищется минимальное
(Добавление)
И она перезаписывается 3 раза: 5000, 3000 и еще раз 3000
8. sKaa - 18 Декабря, 2011 - 19:27:58 - перейти к сообщению
Прошу прощения, туплю..
9. Slesher - 18 Декабря, 2011 - 19:28:49 - перейти к сообщению
armancho7777777 пишет:
Мне надо получить наибольшее число из наименьших 10000.


не понимаю цели. Если просто наибольшее значение из amount, то просто
PHP:
скопировать код в буфер обмена
  1. $max = NULL;
  2. foreach($fileS['discounts'] as $v) {
  3.         if($v['amount'] > $max) {
  4. $max = $v['amount'];
  5. $sum = $v['amount'];
  6. $percent = $v['percent'];
  7.         }
  8. }
10. Champion - 18 Декабря, 2011 - 19:29:12 - перейти к сообщению
sKaa пишет:
Потому что вы всё пихаете в один ключ массива amount ))))
Вы обманываете человека
(Добавление)
Slesher пишет:
Мне надо получить наибольшее число из наименьших 10000.

$max = 0;
$limit = 10000;
цикл {
если очередное значение > $max и не больше 10000 {
перезаписать max
}
}
11. armancho7777777 - 18 Декабря, 2011 - 19:31:07 - перейти к сообщению
Champion пишет:
В коде ищется минимальное
"
Это я уже понял) А как на оборот реализовать?)
Вроде делаю по этому принципу:
http://php.su/articles/?cat=exam...les&page=016
(Добавление)
Champion пишет:
sKaa пишет:
Потому что вы всё пихаете в один ключ массива amount ))))
Вы обманываете человека
(Добавление)
Slesher пишет:
Мне надо получить наибольшее число из наименьших 10000.

$max = 0;
$limit = 10000;
цикл {
если очередное значение > $max и не больше 10000 {
перезаписать max
}
}


Точно! Двойное условие) Блин... )
Переработался уже)
Спасибо Champion )
(Добавление)
Slesher пишет:
не понимаю цели. Если просто наибольшее значение из amount, то просто
Нет. Покупатель набрал товар, будучи имея определённую скидку.
А в файл записан массив со скидками и стартовыми денежными эквивалентами.

 

Powered by ExBB FM 1.0 RC1