| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Сумма чисел в столбце |
| Автор: SeregaGREY 28.7.2009, 23:12 | ||||
Вот пишу скрипт работающий с файлом вида:
написал вот это:
Вот оно мне выводит всё что в столбце #2. а как мне не выводить это содержимое а сложить? И ещё как сложить только те строки в столбце #2, которые имеют в столбце #4 слово "круто"? |
| Автор: SeregaGREY 29.7.2009, 09:29 |
| непонял. где тут суммирование значений второго столбца? |
| Автор: Ипатьев 29.7.2009, 09:30 |
| SeregaGREY, а каков результат сложения? одинодинодин? |
| Автор: s0lman 29.7.2009, 09:41 |
| Ипатьев, внимательно читайте условие: двадвадва |
| Автор: NLspieler 29.7.2009, 10:22 | ||||||
Твой код:
Функцию count($data) в заголовке цикла лучше не использовать. Нужно писать так:
А еще лучше для таких ситуаций использовать цикл foreach |
| Автор: s0lman 29.7.2009, 10:56 |
Вот здесь ни разу не согласен намного лучше в данной ситуации |
| Автор: NLspieler 29.7.2009, 11:02 |
И почему же? |
| Автор: fesor 29.7.2009, 11:40 |
| foreach медленнее чем for)) и жрет больше памяти) |
| Автор: s0lman 29.7.2009, 11:46 |
| Быстродействие. Не вижу смысла его использовать для индексных массивов, тем более, если значения ключей имеют последовательные значения, без пропусков. Добавлено через 59 секунд fesor, долго я печатал )) |
| Автор: NLspieler 29.7.2009, 11:47 | ||||
В PHP4 да, в PHP5 он напротив быстрее и жрет нисколько не больше памяти. Да и писать
гораздо быстрее чем
Кстати, такая тема уже обсуждалась http://forum.vingrad.ru/forum/topic-258847.html |
| Автор: nerezus 29.7.2009, 11:49 | ||
|
| Автор: Ипатьев 29.7.2009, 15:27 | ||
Дж.Свифт, "Путешествия Гулливера" |
| Автор: SeregaGREY 29.7.2009, 18:35 | ||||||||
спасибо! всё красиво разъяснил! |
| Автор: nerezus 29.7.2009, 20:19 | ||
|
| Автор: s0lman 29.7.2009, 21:52 | ||
| В общем, провел несколько опытов. Для опыта использовал индексный массив из 100 тыс. элементов. В первой части опыта просто получал доступ к значению каждого элемента, а во второй уже выполнял действия с самими элементами массива. Результаты меня немного удивили. В первой части опыта foreach и for с переменным успехом опережали друг друга, с чего можно сделать вывод, что их использование примерно одинаковое по производительности, но цикл foreach гораздо удобнее использовать. Признаю свою ошибку выше ;) Во второй части опыта, как и ожидалось, foreach показал очень низкий результат, что не располагает к его использованию в подобных ситуациях. З.Ы. Результаты опыта у меня примерно такие:
З.З.Ы. На случай, если кто захочет проверить, прилеплю свой гениальный код |
| Автор: Ипатьев 29.7.2009, 22:35 | ||
В подобных - это в каких? В циклах на сто тыщ итераций? Соглашусь. Для 0,00001% программ, где требуется такое количество оборотов, данная рекомендация будет иметь смысл. Впрочем, только в том случае, если этот цикл ничего, кроме присваивания не делает. В реальности, когда мы тестируем не сферический цикл в вакууме (чем повально улекаются все борцы за скорость), кроме получения и записи данных в массив, существует хоть какая-то их обработка - например, регулярным выражением. И какая разница будет этом случае, и имеет ли смысл на нее обращать внимание - отдельный вопрос. Но я понимаю. Если исследовать реальные задачи, а не высосанные из пальца, тогда и подискутировать будет не о чем, и цифры, поражающие воображение некому показать будет. |
| Автор: s0lman 29.7.2009, 22:39 |
В случаях изменения значения элементов массива |
| Автор: Ипатьев 29.7.2009, 22:46 |
| У автора топика этих элементов будет максимум сотня. Стоит ли разница в скорости на таком количестве итераций потраченного времени на обсуждение и тесты? Неужели не стыдно преподносить всю эту ерунду, как чудесные озарения, проливающие свет на всю дальнейшую профессиональную деятельность? |
| Автор: nerezus 29.7.2009, 22:48 | ||
|
| Автор: s0lman 29.7.2009, 23:13 |
| Ипатьев, я вас не совсем понимаю. Если вам проще написать более удобный код вместо чуть более эффективного, я не пытаюсь вас переубеждать Можно также полагаться на мощь серверов, для которых сэкономленные ресурсы не сыграют особой роли... С другой стороны некоторые рекомендуют использовать одинарные кавычки для вывода текста. В нашем же случае с циклами, думается, разница в быстродействии более заметна. Большое количество элементов взял для большей точности вычислений. В итоге, как видим, при изменении массива цикл foreach почти втрое медленней for. |
| Автор: nerezus 29.7.2009, 23:19 | ||
|
| Автор: Ипатьев 29.7.2009, 23:20 |
| Дело в том, что относительные цифры ("в полтора раза") не значат ничего. Многие люди этого не понимают. Ведро воды больше, чем стакан? В 50 раз. А в масштабе мирового океана это имеет хоть какое-то значение? Или хотя бы в масштабе бассейна? И не надо мне тыкать ресурсами. Ресурсы экономят не на кавычках. |
| Автор: icewind 29.7.2009, 23:42 | ||
Согласен с Ипатьев.
Особенно если оперировать придется максимум наперстками... |
| Автор: SeregaGREY 6.8.2009, 12:23 | ||
| а как теперь можно не только складывать значения в столбцах, но и умножать значения в строках применительно к вашему скрипту? то есть например: 1|2|3|круто 1|2|3|некруто 1|2|3|круто в строках умножить 1ое и 3е значения и сложить все эти умнождения? 1*3 +1*3+1*3 = 9
|
| Автор: Ипатьев 6.8.2009, 12:32 |
| Вот, кстати, о пользе написания готовых скриптов. Казалось бы, простейшая операция - умножение. И, наверняка, если бы автор вопроса написал код сам, и понимал значение используемых в нем переменных, то с легкостью смог бы их перемножить. А поскольку для него код - абракадабра, то даже с таким простым вопросом идет за помощью на форум. SeregaGREY, твои значения лежат в массиве $yacheiki. Неужели ты не можешь перемножить две переменные? |
| Автор: SeregaGREY 6.8.2009, 12:57 | ||
$otwet += $yacheiki[1] *$yacheiki[3]; так? |
| Автор: Ипатьев 6.8.2009, 13:22 | ||
Примерно. Только элементы в массиве нумеруются с нуля, а значит должно быть
|
| Автор: s0lman 6.8.2009, 15:04 |
<offtop> Чем-то мне Ипатьев напоминает Фельдмаршала </offtop> |
| Автор: bars80080 7.8.2009, 13:57 |
однако, это не он, ибо повторил ту же ошибку. вначале добрый, а потом потихоньку приходит понимание, что вопрошающий часто не ищет знаний, а просто ищет ответ на вопрос, чтобы наконец сдать растреклятую лабу, и нафиг оно ему больше не нужно |