Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сумма чисел в столбце 
V
    Опции темы
SeregaGREY
Дата 28.7.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Вот пишу скрипт работающий с файлом вида:
Код

один|два|три|круто|
один|два|три|некруто|
один|два|три|круто|


написал вот это:
Код

<?
$data = File("bd.dat");
echo "<table width=100% border=1 cellpadding=0 cellspacing=0 bordercolor=#cccccc><tr>";
for ($i=0;$i<count($data);$i++) {
$data_array = explode("|", $data[$i]);
{
    echo "<td><right>$data_array[1]";
    
    }

echo "</tr>";
}

echo "</table>";
?>


Вот оно мне выводит всё что в столбце #2. а как мне не выводить это содержимое а сложить?

И ещё как сложить только те строки в столбце #2, которые имеют в столбце #4 слово "круто"?
PM MAIL   Вверх
s0lman
Дата 29.7.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Как вариант - объявить массив
Код

$num=array('1'=>'один', '2'=>'два');

а извлекать числовое значения для суммирования так
Код

$val=array_search($data_array[1],$num);


Добавлено через 3 минуты и 4 секунды
Цитата(SeregaGREY @  28.7.2009,  23:12 Найти цитируемый пост)
И ещё как сложить только те строки в столбце #2, которые имеют в столбце #4 слово "круто"? 

Дополнительная проверка
Код

if($data_array[3]=='круто'){$sum+=$val;}



--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
SeregaGREY
Дата 29.7.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



непонял. где тут суммирование значений второго столбца?
PM MAIL   Вверх
Ипатьев
Дата 29.7.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



SeregaGREY, а каков результат сложения? одинодинодин?

PM MAIL   Вверх
s0lman
Дата 29.7.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Ипатьев, внимательно читайте условие: двадвадва   smile 


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
NLspieler
Дата 29.7.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Код

<?php
/*
Такой синтаксис файла будет более приемлимым:

1|2|3|круто
1|2|3|некруто
1|2|3|круто
*/

$stroki = file ('bd.dat') ;

$otwet = 0 ; //Переменная для ответа

foreach ($stroki as $stroka) //Проходимся по массиву  
{
    $yacheiki = explode ("|" , $stroka) ; //Разделяем строку на 4 ячейчи
    if ($yacheiki[3]=='круто') //Если в 4 ячейки текст "круто"
    {
        $otwet += $yacheiki[1] ; //Прибавляем к ответу значение второй ячейчи
    }
}

echo $otwet ; //Отображаем ответ

?>


Твой код:

Код

<?
$data = File("bd.dat");         //функция file пишется с маленькой буквы 
echo "<table width=100% border=1 cellpadding=0 cellspacing=0 bordercolor=#cccccc><tr>";

for ($i=0;$i<count($data);$i++) {
$data_array = explode("|", $data[$i]);
{  //Для чего эта скобка?

    echo "<td><right>$data_array[1]"; //такой код работать не будет 
    //можно написать так echo  echo "<td><right>" . $data_array[1]; 
   //Это конечно вопрос не php, но все же, где закрывающие теги?
    
    } //Для чего эта скобка?

echo "</tr>";
}

echo "</table>";
?>


Функцию count($data) в заголовке цикла лучше не использовать. Нужно писать так:
Код

$count = count($data) ;
for ($i=0; $i<$count; $i++)

А еще лучше для таких ситуаций использовать цикл foreach

Это сообщение отредактировал(а) NLspieler - 29.7.2009, 10:42
PM MAIL   Вверх
s0lman
Дата 29.7.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Цитата(NLspieler @  29.7.2009,  10:22 Найти цитируемый пост)
А еще лучше для таких ситуаций использовать цикл foreach

Вот здесь ни разу не согласен

Цитата(NLspieler @  29.7.2009,  10:22 Найти цитируемый пост)
$count = count($data) ;
for ($i=0; $i<$count; $i++)

намного лучше в данной ситуации smile


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
NLspieler
Дата 29.7.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(s0lman @  29.7.2009,  10:56 Найти цитируемый пост)
Вот здесь ни разу не согласен

И почему же?
PM MAIL   Вверх
fesor
Дата 29.7.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 16.7.2009
Где: Минск

Репутация: 4
Всего: 4



foreach медленнее чем for)) и жрет больше памяти)
PM MAIL WWW   Вверх
s0lman
Дата 29.7.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Быстродействие. 
Не вижу смысла его использовать для индексных массивов, тем более, если значения ключей имеют последовательные значения, без пропусков.

Добавлено через 59 секунд
fesor, долго я печатал ))


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
NLspieler
Дата 29.7.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(fesor @  29.7.2009,  11:40 Найти цитируемый пост)
foreach медленнее чем for)) и жрет больше памяти)


В PHP4 да, в PHP5 он напротив быстрее и жрет нисколько не больше памяти.

Да и писать
Код

foreach ($array as $value) 


гораздо быстрее чем

Код

$count = count ($array)
for ($n=0; $n<$count; $n++)


Кстати, такая тема уже обсуждалась 
http://forum.vingrad.ru/forum/topic-258847.html
PM MAIL   Вверх
nerezus
Дата 29.7.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

намного лучше в данной ситуации
 Почему 2 строчки-костыля лучше нормального варианта?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ипатьев
Дата 29.7.2009, 15:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата

Поводом к  войне послужили следующие
обстоятельства.   Всеми   разделяется убеждение,   что  вареные  яйца  при
употреблении  их  в  пищу  испокон  веков разбивались с тупого конца; но дед
нынешнего  императора, будучи ребенком,  порезал  себе палец за завтраком,
разбивая  яйцо означенным  древним способом. Тогда император, отец ребенка,
обнародовал  указ,  предписывающий  всем  его подданным под страхом строгого
наказания  разбивать  яйца  с острого конца. Этот закон до такой степени
озлобил  население,  что,  по  словам  наших  летописей,  был причиной шести
восстаний,  во время  которых один  император  потерял  жизнь,  а другой -
корону[36].  Мятежи эти постоянно разжигались монархами Блефуску, а после их
подавления  изгнанники всегда находили приют в этой империи. Насчитывают до
одиннадцати тысяч фанатиков, которые в течение этого времени пошли на казнь,
лишь  бы  не  разбивать яйца с острого конца. Были напечатаны сотни огромных
томов, посвященных этой полемике...

Дж.Свифт, "Путешествия Гулливера"

PM MAIL   Вверх
SeregaGREY
Дата 29.7.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(NLspieler @ 29.7.2009,  10:22)
Код

<?php
/*
Такой синтаксис файла будет более приемлимым:

1|2|3|круто
1|2|3|некруто
1|2|3|круто
*/

$stroki = file ('bd.dat') ;

$otwet = 0 ; //Переменная для ответа

foreach ($stroki as $stroka) //Проходимся по массиву  
{
    $yacheiki = explode ("|" , $stroka) ; //Разделяем строку на 4 ячейчи
    if ($yacheiki[3]=='круто') //Если в 4 ячейки текст "круто"
    {
        $otwet += $yacheiki[1] ; //Прибавляем к ответу значение второй ячейчи
    }
}

echo $otwet ; //Отображаем ответ

?>


Твой код:

Код

<?
$data = File("bd.dat");         //функция file пишется с маленькой буквы 
echo "<table width=100% border=1 cellpadding=0 cellspacing=0 bordercolor=#cccccc><tr>";

for ($i=0;$i<count($data);$i++) {
$data_array = explode("|", $data[$i]);
{  //Для чего эта скобка?

    echo "<td><right>$data_array[1]"; //такой код работать не будет 
    //можно написать так echo  echo "<td><right>" . $data_array[1]; 
   //Это конечно вопрос не php, но все же, где закрывающие теги?
    
    } //Для чего эта скобка?

echo "</tr>";
}

echo "</table>";
?>


Функцию count($data) в заголовке цикла лучше не использовать. Нужно писать так:
Код

$count = count($data) ;
for ($i=0; $i<$count; $i++)

А еще лучше для таких ситуаций использовать цикл foreach

спасибо! всё красиво разъяснил!
PM MAIL   Вверх
nerezus
Дата 29.7.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

Дж.Свифт, "Путешествия Гулливера"
 Наверное тебе просто не приходилось разбираться в "наоптимизированном" коде.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.