За последние 24 часа нас посетили 17505 программистов и 1716 роботов. Сейчас ищут 1816 программистов ...

Сложение чисел из файла

Тема в разделе "PHP для новичков", создана пользователем Игорь_Vasinsky, 13 ноя 2008.

  1. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    А еслиб я из массива хотел бы скажем сложить тольго с 5 по 15 число?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    PHP:
    1. <?php
    2. include(file.txt);
    3. $arr = explode("|", $count);
    4. $summ = 0;
    5. for($f = 4; $f <= 14; $f++) {
    6.   $summ = $summ + $arr[$f];
    7. }
    8. echo $summ;
    9. ?>
     
  3. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    +1
     
  4. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    Спасиб. Теперь достаточно пищи для размышления и работы. Теперь чуть что - так сразу к вам.
     
  5. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    А как если у вас будет задание не инклудить файл а открыть его считать и просуммировать содержимое с проверкой на целочисленное значение.
    Странно както инклудить контент.Может я чего то не понимаю :?: :arrow:
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    лучше туда, где стоит рубильник «включить думалку»
     
  7. Vitas

    Vitas Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Не понимаешь.
     
  8. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    Что именно?Подробней.
     
  9. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа

    В принципе можно открыть файл и прочитать его. Но мне и так нравиться.[/quote]
     
  10. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    В title написано "Программирование на PHP для новичков" - тут таких рубильников не ставят.
     
  11. Greg1978

    Greg1978 Активный пользователь

    С нами с:
    18 окт 2008
    Сообщения:
    484
    Симпатии:
    0
    Адрес:
    class SenjorUser{}
    [/quote]

    http://forum.ishodniki.ru/index.php?topic=14812.0
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Ставят.
    Есть ещё блондинки ;)
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    К мозгам, потом мануалу, потом гуглу, а уже после -- к нам.
     
  14. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    НУ вы парни развели здеь дикуссию совсем не по теме. Люди же помогли и чень оперативно, за что я им оч благодарен. Одна голова хорошо, а форум лучше. И потом яша рулит, прото предмет специфичекий, а php это не сканворд.
     
  15. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    :lol: Ну вот я снова к вам!

    Теперь хочу чтобы можно было выташить из этого txt 5 самых больших чичел - но незнаю как!
     
  16. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    PHP:
    1.  
    2. <?php
    3. // исходная строка
    4. $count="2|0|0|3|0|1|0|5|0|7|3|4|1|2|0|3|1";
    5.  
    6. // сколько чисел нужно извлечь
    7. $max_num = 5;
    8.  
    9. $arr = explode('|', $count);
    10. rsort($arr);
    11.  
    12. $tmp_max = $arr[0];
    13. $max[0]  = $arr[0];
    14.  
    15. for ($i = 0; $i < sizeof($arr); $i++) {
    16.     // проверяем чтобы не записывать одинаковые числа
    17.     if ($arr[$i] < $tmp_max) {
    18.         $max[]  = $arr[$i];
    19.         $tmp_max = $arr[$i];  
    20.     }
    21.     if (sizeof($max) >= $max_num) {
    22.         break;
    23.     }
    24. }
    25.  
    26. // смотрим результат
    27. echo "<pre>";
    28. print_r($max);
    29. echo "</pre>";
    30. ?>
    31.  
    [​IMG] [​IMG] [​IMG]
     
  17. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    PHP:
    1. <?php
    2. $numbers="2|0|0|3|0|1|0|5|0|7|3|4|1|2|0|3|1";
    3. $num_arr = explode("|", $numbers);
    4. $count = array_count_values($num_arr);
    5. arsort($count);
    6. $result = Array();
    7. while ($num = current($count)) {
    8.     $result[key($count)] = $num;
    9.     next($count);
    10. }
    Хотя можно пойти еще более простым способом:
    PHP:
    1. <?php
    2. $numbers="2|0|0|3|0|1|0|5|0|7|3|4|1|2|0|3|1";
    3. $count = Array();
    4. for ($i = 0; $size = strlen($numbers); $i < $size; $i += 2) {
    5.      $count[$numbers[$i]] = (isset($count[$numbers[$i]])) ? $count[$numbers[$i]] + 1 : 0;
    6. }
    7. arsort($count);
    8. $result = Array();
    9. while ($num = current($count)) {
    10.     $result[key($count)] = $num;
    11.     next($count);
    12. }
    13. ?>
    В последнем варианте на 1 раз меньше проходимся по массиву.
     
  18. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    Во первых числа могут быть двух и более значными.
    Во вторых нужно только 5 самых большых чисел а не весь список имеющихся в исходной строке.
    В третьих возможно топикастеру нужен список именно 5 и не меньше чисел, хотя в строке может быть и не набраться столько - тогда нужно будеть дополнить массив недостающими.

    Может такой вариант покажется приемлемым?
    PHP:
    1.  
    2. <?php
    3. $numbers="12|0|0|13|0|10|0";
    4. // сколько чисел нужно извлечь
    5. $max_num = 5;
    6.  
    7. $num_arr = explode("|", $numbers);
    8. $count   = array_count_values($num_arr);
    9. krsort($count);
    10. $result = array();
    11. while (current($count) && sizeof($result) < $max_num) {
    12.     $result[] = key($count);
    13.     next($count);
    14. }
    15. // проверяем не заполнен ли массив до заданного числа элементов
    16. // если нет дополняем его
    17. if (($last_i = sizeof($result) - 1) < $max_num) {
    18.     for ($i = $last_i; $i < $max_num; $i++) {
    19.         $result[$i] = $result[$last_i];
    20.     }
    21. }
    22. ?>
    23.  
     
  19. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    А проще точно нельзя?

    PHP:
    1. <?php
    2. $numbers="2|0|0|3|0|1|0|5|0|7|3|4|1|2|0|3|1";
    3. $num_arr = explode("|", $numbers);
    4. $sorted_five=array_slice(rsort($num_arr), 0, 5);
    5. ?>
     
  20. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    karakh - молодца! Действительно краткость сестра таланта!
    Только немного не точно
    PHP:
    1.  
    2. $numbers = "2|0|0|3|0|1|0|5|0|7|3|4|1|2|0|3|1";
    3. $num_arr = explode("|", $numbers);
    4. rsort($num_arr); // возвращает все таки не массив а - bool
    5. $sorted_five = array_slice($num_arr, 0, 5);
    6. echo "<pre>";
    7. print_r($sorted_five);
    8. echo "</pre>";
    [/php]
     
  21. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Спасибо. Никак не могу привыкнуть :(
     
  22. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Там юному падавану Игорь_Vasinsky потребовалось еще и индексы из массива выковыривать. Поэтому не
    PHP:
    1. rsort($num_arr);
    , надо изменить на
    PHP:
    1. arsort($num_arr);
    .

    ну и вывод меняется соответственно на

    PHP:
    1.  
    2. reset($num_arr);
    3. while (list($key, $val) = each($num_arr)) {
    4.     echo "$key = $val\n";
    5. }
     
  23. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    Превосходно. Тока результат:

    Array
    (
    [0] => 7
    [1] => 5
    [2] => 4
    [3] => 3
    [4] => 3
    )


    А необходим

    7 (10)
    5 (8)
    4 (12)
    3 (4)
    3 (11)

    Чтоб вывод был именно такой, т.е. вы выдали места с наибольшего до меньшего, а нужно - порядковые номера в массиве!

    Так можно?

    Пардон за трэды, форум выдал чо тема удалена.
     
  24. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    0 = 7 1 = 5 2 = 4 3 = 3 4 = 3 5 = 3 6 = 2 7 = 2 8 = 1 9 = 1 10 = 1 11 = 0 12 = 0 13 = 0 14 = 0 15 = 0 16 = 0

    не приемлемо
     
  25. Игорь_Vasinsky

    Игорь_Vasinsky Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    0
    Адрес:
    Уфа
    Если упростит то объясню что это:

    В этом файле записывается кол-во скачек файлов, есть другой файл где в таком же виде записано название файлов

    Моя задача вывести рейтинг 5 ти наиболее скачиваемых файлов