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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
armancho7777777 Супермодератор
Отправлено: 18 Декабря, 2011 - 16:05:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Всем привет!
Вот код:

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']
В чём проблема?

(Отредактировано автором: 18 Декабря, 2011 - 16:12:58)

 
 Top
cHameleon
Отправлено: 18 Декабря, 2011 - 16:30:16
Post Id



Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




А с чего вы решили, что только один раз? в конце выводится лишь последний вариант: 3000 - 3... ведь в массиве нет числа больше, чем указанно в переменной $sum.


-----
берём notepad++ и творим пэхэпэ-мир
 
 Top
OrmaJever Модератор
Отправлено: 18 Декабря, 2011 - 16:43:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




armancho7777777 пишет:
По идее, она должна перезаписываться каждый раз, когда $sum >= $v['amount']

Ну да, только это условие всегда false, как уже сказали нету числа из масива больше $sum поэтому это условие вобще не выполняется. А по скольку оно не выполняется то вывести должно


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
cHameleon
Отправлено: 18 Декабря, 2011 - 17:17:31
Post Id



Гость


Покинул форум
Сообщений всего: 107
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Почему всегда false то?) если наоборот, всегда true! и условие выполняется всегда.
выражение: $sum {больше либо равно} $v['amount']


-----
берём notepad++ и творим пэхэпэ-мир
 
 Top
Slesher
Отправлено: 18 Декабря, 2011 - 17:54:34
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




armancho7777777, она и перезаписывается 4 раза, просто у вас 3000 - это последнее значение. Попробуйте сменить порядок записей в масиве.
 
 Top
armancho7777777 Супермодератор
Отправлено: 18 Декабря, 2011 - 19:22:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Вообще, было ещё это:



... но убрал, так как я думаю над реализацией именно подобного варианта.
Почему-то кажется, что не совсем надёжное выражение получатся)
Мне надо получить наибольшее число из наименьших 10000.

(Отредактировано автором: 18 Декабря, 2011 - 19:22:33)

 
 Top
Champion Супермодератор
Отправлено: 18 Декабря, 2011 - 19:27:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




armancho7777777 пишет:
Не выводится максимальное значение массива
В коде ищется минимальное
(Добавление)
И она перезаписывается 3 раза: 5000, 3000 и еще раз 3000
 
 Top
sKaa
Отправлено: 18 Декабря, 2011 - 19:27:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Прошу прощения, туплю..

(Отредактировано автором: 18 Декабря, 2011 - 19:29:27)

 
 Top
Slesher
Отправлено: 18 Декабря, 2011 - 19:28:49
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




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. }
 
 Top
Champion Супермодератор
Отправлено: 18 Декабря, 2011 - 19:29:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




sKaa пишет:
Потому что вы всё пихаете в один ключ массива amount ))))
Вы обманываете человека
(Добавление)
Slesher пишет:
Мне надо получить наибольшее число из наименьших 10000.

$max = 0;
$limit = 10000;
цикл {
если очередное значение > $max и не больше 10000 {
перезаписать max
}
}
 
 Top
armancho7777777 Супермодератор
Отправлено: 18 Декабря, 2011 - 19:31:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




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, то просто
Нет. Покупатель набрал товар, будучи имея определённую скидку.
А в файл записан массив со скидками и стартовыми денежными эквивалентами.

(Отредактировано автором: 18 Декабря, 2011 - 19:42:57)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB