За последние 24 часа нас посетили 17838 программистов и 1622 робота. Сейчас ищут 996 программистов ...

Как выташить массив из цыкла:?

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

  1. OdieZlo

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

    С нами с:
    1 ноя 2008
    Сообщения:
    14
    Симпатии:
    0
    PHP:
    1. <?php
    2.         $dir = dir('images/thumbnails/');
    3.          $i = 0;
    4.          while ($entry = $dir->read()) {
    5.              if (substr($entry,0,1) == 'a') {
    6.                  $name[$i] = substr($entry,0,10);
    7.                  $i++;
    8.              }
    9.          }   
    10. ?>
    вот такую вот я хрень написал)
    парился над нею с трёх часов ночи... но то чего хотел так и не получил((( (так что уровень познаний в PHP у меня не велик)
    а хочется мне следущего:
    в папке лежат JPGи, и их имена пишутся в переменную $file (все которые начинаются с 'a' и дальше читает 10 символов)
    если сделать так
    PHP:
    1. <?php
    2.         $dir = dir('images/thumbnails/');
    3.          $i = 0;
    4.          while ($entry = $dir->read()) {
    5.              if (substr($entry,0,1) == 'a') {
    6.                  $name[$i] = substr($entry,0,10);
    7.                  echo $name[$i];
    8.                  $i++;
    9.              }
    10.          }   
    11. ?>
    то покажутся все имена этих JPG. а если echo $name[$i], написать после цикла, то ни чего не будет...
    а я хочу, что бы это можно было сделать в любом мести скрипта...
    я так предпологаю что его надо запихнуть в массив... но как это сделать:?
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    у тебя после цикла $i равно количеству элементов +1
    Вопрос, чему равно $name[$i] ?
     
  3. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    Если тебе надо данные в не цикла запиши их в массив

    PHP:
    1.  
    2. <?
    3.  $dir = dir('images/thumbnails/');
    4.           $i = 0;
    5.           while ($entry = $dir->read()) {
    6.               if (substr($entry,0,1) == 'a') {
    7.                   $arr[]=$name[$i] = substr($entry,0,10);
    8.                   echo $name[$i];
    9.                  $i++;
    10.               }
    11.           }
    12.  ?>
    13.  
    14.  
    А потом разбирай его!
     
  4. OdieZlo

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

    С нами с:
    1 ноя 2008
    Сообщения:
    14
    Симпатии:
    0
    Ну сначала мы присваиваем $name[] номер [0] то есть $i
    а потом при повторении цикла увеличиваем
    вообще я это списал с другого скрипта, так что я не полноценный автар! это так сказать плагиат!)
    но я его уже на столько изучил, что лет через 10 точно вспомню!))) LoL
     
  5. OdieZlo

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

    С нами с:
    1 ноя 2008
    Сообщения:
    14
    Симпатии:
    0
    kuliev Спасибо! CooL
    Ну вот, так всегда... паришься, паришься... а всё оказывается не так уш и сложно!
     
  6. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    После цикла разбирай массив
    PHP:
    1.  
    2. <?
    3. for($i=0; $i<=count($arr)-1; $i++){
    4.  echo "<b>".$arr[$i]."</b><br>";
    5. }
    6. ?>
    7.  
    А лучше почитай информацию про массивы, какие они бывают и что с ними мона делать!
     
  7. OdieZlo

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

    С нами с:
    1 ноя 2008
    Сообщения:
    14
    Симпатии:
    0
    kuliev
    да я тут всё подрят читаю!)))
    хотелось по скорей закончить скрипт!
    скрипт читает каталог с фотками, и формерует под него таблицу
    и вот что получилось:
    PHP:
    1. <?
    2.   $dir = dir('images/thumbnails/');
    3.            $i = 0;
    4.            while ($entry = $dir->read()) {
    5.                if (substr($entry,0,1) == 'a') {
    6.                    $arr[]=$name[$i] = substr($entry,0,10);
    7.                 $i++;
    8.                
    9.                }
    10.            }
    11.            $IMG = $i;
    12.            $nTR = $IMG / 5;
    13.  
    14.            $head = "<Table width='100%' height='100%' border='1'><tr>";
    15.  
    16.            $narr = 0;
    17.  
    18.            echo $head;
    19.            for ($r = 0; $r < $nTR; $r=$r+1) {
    20.                for ($n = 0; $n < 5; $n=$n+1) {
    21.                    echo "<td><a href='images/big/".$arr[$narr]."' rel='lightbox[roadtrip]'><img src='images/thumbnails/".$arr[$narr]."' border='0'></a></td>";
    22.                    $narr++;
    23.                    if ($arr[$narr] == $arr[$IMG]) break;
    24.                    }
    25.                    echo "</TR><TR>";
    26.            }
    27.                    echo "</tr></TABLE>";
    28.   ?>
    вот тоже самое с коментами:

    PHP:
    1. <?
    2.  // открываем директорию
    3.   $dir = dir('images/thumbnails/');
    4.   // переменная $i нужна для массива $name, что бы его в дальнейшем увеличивать ставим значение 0
    5.            $i = 0;
    6.            // цикл: читаме нашу дерикторию, и если файл начинается на симвл "а" то помещаем его в переменную в промежуточный массив $name[] и сразу же помещаем в оснавной массив $arr[] затем увеличиваем переменную $i, и продолжаем цикл, пока не просмотрим все файлы
    7.            while ($entry = $dir->read()) {
    8.                if (substr($entry,0,1) == 'a') {
    9.                    $arr[]=$name[$i] = substr($entry,0,10);
    10.                 $i++;
    11.                
    12.                }
    13.            }
    14.  
    15.            // переменная $IMG это колличество всех фотографий с которыми мы будем работать, после цикла мы его получаем из переменной $i
    16.            $IMG = $i;
    17.            // переменная $nTR будет определять колличество строк <TR> в нашей таблице, получаем его разделив на определённое колличество ячеек в нашей таблице
    18.            $nTR = $IMG / 5;
    19.  
    20.            
    21.            // как и переменная $i, $narr мы будем увеличивать в цикле
    22.            $narr = 0;
    23.  
    24.            echo "<Table width='100%' height='100%' border='1'><tr>";
    25.            //цикл в котором мы определяем сколько рас у нас будут повторяться строки
    26.            for ($r = 0; $r < $nTR; $r=$r+1) {
    27.                //цикл в котором мы определяем сколько рас у нас будут повторяться ячейки и увеличиваем каждый цыкл значение $narr, для вставления в каждую новую ячейку следущую фотку
    28.                for ($n = 0; $n < 5; $n=$n+1) {
    29.                    echo "<td><a href='images/big/".$arr[$narr]."' rel='lightbox[roadtrip]'><img src='images/thumbnails/".$arr[$narr]."' border='0'></a></td>";
    30.                    $narr++;
    31.                    // если массив $arr[$narr] будет равен колличеству фоток ($IMG) то прекрацаем этот цикл
    32.                    if ($arr[$narr] == $arr[$IMG]) break;
    33.                    }
    34.                    echo "</TR><TR>";
    35.            }
    36.                    echo "</tr></TABLE>";
    37.   ?>
    вроде всё работает...
    я вообще не очень понимаю как использовать for не много по другому, да и ещё много чего... ну надеюсь, это только пока!)))
    будем учитсо дальше!
    Всем большое СПАСИБО!!!
    З.Ы. если есть какието нарикания или пожелания, с удовольствием выслушаю!
     
  8. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    ТЫ НАВЕРНОЕ НЕ ПОНИМАЕШЬ ЧТО ТАКОЕ $I;
    После цикла $i=0 т.к. объявлена до начала цикла

    PHP:
    1.  
    2.  <?
    3.  echo "<Table width='100%' height='100%' border='1'>";
    4.             //цикл в котором мы счетаем количество элементов в массиве, отнимаем 1 так как массив начинается с 0
    5.             for ($i = 0; $i <= count($arr)-1; $i++) {
    6.                 //цикл в котором мы определяем сколько рас у нас будут повторяться ячейки и увеличиваем каждый цыкл значение $narr, для вставления в каждую новую ячейку следущую фотку
    7.            
    8.  echo "<tr><td><a href='images/big/".$arr[$i]."' rel='lightbox[roadtrip]'><img src='images/thumbnails/".$arr[$i]."' border='0'></a></td></TR>";
    9.             }
    10.                     echo "</tr></TABLE>";
    11.     ?>
    12.  
    13.  
     
  9. OdieZlo

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

    С нами с:
    1 ноя 2008
    Сообщения:
    14
    Симпатии:
    0
    Хм... соглашусь... это очень даже логично!
    но почему тогда:
    PHP:
    1. <?
    2.    $dir = dir('images/thumbnails/');
    3.            $i = 0;
    4.            while ($entry = $dir->read()) {
    5.                if (substr($entry,0,1) == 'a') {
    6.                    $arr[]=$name[$i] = substr($entry,0,10);
    7.                  $i++;
    8.                  
    9.                }
    10.            }
    11.            echo $i;
    12. ?>
    результат будет равен 20, собственно столько же фоток и лежит в папке images/thumbnails/ с буквой "а" в начале:?
    то есть получается это значение осталось...
    может быть у меня версяя php не та... или мы всё ещё находимся в цыкле:?
    не понятно... (((
     
  10. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    Тебе просто надо разбить количество картинок на страницу, скажем по 5 на одну страницу.
    http://www.phpfaq.ru/paginator
     
  11. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Нет, это нифига не логично. После цикла i=20 именно потому что объявлена до начала цикла.
    Именно поэтому я и сказал, что если echo $name[$i] написать после цикла, то php будет пытаться вывести $name[20], а там ничего нет.
     
  12. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ацки жжОте! :)

    $i++ - это пост-инкрементирование $i - увеличение на единицу. Но даже не это важно.
    Важно то, что в условии оно выполняется даже на последней итерации после нужных действий (substr и тд).
    А начианется цикл с 0.
    А c 0 до 19 = 20 шагов.
    В последней операции занеслось с индексом 19 ( сиречь 20ый файл). Инкрементировался $i, стал 20.
    Ессно в массиве 20 элемента нет.

    БУКВАРЬ.
     
  13. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    ну дык а я о чем?
     
  14. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    karakh
    Да нет, все правильно, только для человека, который не понимает азов, сентенция типа
    Будет непереводима :)
    Я и сам не сразу въехал в смысл ;)
     
  15. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    а как еще я мог отреагировать на
    ?
     
  16. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    karakh
    :) ok, ok.
     
  17. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    мир :)
    объясни мне заодно зачем им понадобилось еще $arr[]=$name[$i] = substr($entry,0,10); ?
    чем им просто $name не массив?
     
  18. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    karakh
    Да с $i=0; я погорячился, после инкрементирования $i=20 :)
     
  19. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    karakh
    "Сие науке неизвестно" (c)
    Может чтобы отработать множественное присвоение ? :)

    ___
    кстати, substr($entry,0,1) == 'a' это $entry[0] == 'a'
     
  20. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    помоему человек просто издевается
     
  21. OdieZlo

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

    С нами с:
    1 ноя 2008
    Сообщения:
    14
    Симпатии:
    0
    Блин... жесть!)
    Вот научусь программировать, и напишу программу которая сома всё будет программировать!
    Нах!)))