За последние 24 часа нас посетили 19988 программистов и 1630 роботов. Сейчас ищут 1850 программистов ...

Вывести значения из двух файлов в одном цикле.

Тема в разделе "PHP для новичков", создана пользователем mihai, 12 мар 2011.

  1. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    Есть две текстовые базы.

    bd_1.txt
    в первом файле записываются

    Код (Text):
    1.  login::pass



    bd_2.txt
    во втором файле записываются
    логин и аватор этого пользователя

    Код (Text):
    1.  login::avat.gif

    как вывести в одном цикле значения из обоих файлов txt.
    чтобы на странице всё совпадало.

    каритнка аватора - логин - пароль
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    PHP:
    1. <?php
    2. $passwords = doArray(file('bd_1.txt'), '::');
    3. $avatars = doArray(file('bd_2.txt'), '::');
    4. foreach($passwords as $login => $password) {
    5.     $avatar = isset($avatars[$login]) ? $avatars[$login] : '';
    6.     echo("Аватара: {$avatar}; Логин: {$login}; Пароль: {$password}<br />\r\n");
    7. }
    8. function doArray($input = array(), $sep = ';') {
    9.     $out = array();
    10.     foreach($input as $str) {
    11.         $str = trim($str);
    12.         $row = explode($sep, $str);
    13.         $out[$row[0]] = $row[1];
    14.     }
    15.     return($out);
    16. }
    17. ?>
     
  3. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    Ох sobachnik за что ?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Любит он тебя. Тайно.
     
  5. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    Всё очень хорошо вот только бы хотелось
    узнать как это работает если есть минуточка прокоментрирй пожалуйста код.
    И если можно это как то попроще оформить.
    У меня ни чего не понимается.

    PHP:
    1.  
    2. <?php
    3. //создаём функцию
    4.  function doArray($input = array(), $sep = ';')
    5.  {
    6.      //создаём пустой массив
    7.      $out = array();
    8.      
    9.      //перебираем полученный массив и присваивем каждому элементу массива значение $str[]
    10.      foreach($input as $str)
    11.      {
    12.          $str = trim($str);
    13.          //разбиваем строку на  $str с разделителем  $sep
    14.          $row = explode($sep, $str);
    15.          //ВОТ ЭТО НЕ ПОНЯТНО ЧТО ЗА ХРЕНЬ
    16.          $out[$row[0]] = $row[1];
    17.      }
    18.      //выводим
    19.      return($out);
    20.  }
    21.  
    22. //подключаем функцию   doArray()
    23. $passwords = doArray(file('bd_1.txt'), '::');
    24. //подключаем функцию   doArray()
    25. $avatars = doArray(file('bd_2.txt'), '::');
    26.  
    27. //а вот ниже вообще ТАНК ...
    28.  foreach($passwords as $login => $password)
    29.  {
    30.      $avatar = isset($avatars[$login]) ? $avatars[$login] : '';
    31.      echo("Аватара: {$avatar}; Логин: {$login}; Пароль: {$password}<br />\r\n");
    32.  }
    33.  
    34. ?>
    35.  
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    1.
    Нет. Мы перебираем полученный массив элемент за элементом и при каждой итерации (при каждом новом элементе) присваиваем его значение (т.е. значение текущего элемента) переменной $str.
    2.
    Этим выражением мы создаём новый элемент в массиве $out, ключём которого является $row[0], а значением $row[1]. Это примерно тоже самое, что если бы написали $out[1] = 'some_value'; только в качестве и ключа и значения мы подставляем не фиксированные значения (1 и 'some_value'), а значения переменных (в данном случае значения элементов 0 и 1 массива $row)
    3.
    По поводу танка.
    Цикл foreach перебирает переданный ему массив по элементам и на каждой итерации присваивает либо только значение, либо и ключ и значение текущего элемента (в зависимости от того, как вызывается этот цикл) заданным переменным.
    Если написать
    foreach($array as $value) { }
    то на каждой итерации переменной $value будет присваиваться значение текущего элемента
    Если написать
    foreach($array as $key => $value) { }
    то на каждой итерации переменной $key будет присваиваться значение ключа текущего элемента массива $array, а переменной $value - значение этого элемента. Естественно, имена переменных ($key и $value) мы можем выбирать какие угодо, как нам удобно. Я выбрал такие, которые на мой взгляд наиболее точно отображают смысл содержащихся в них данных.
    Строка
    $avatar = isset($avatars[$login]) ? $avatars[$login] : '';
    это тоже самое, что и
    if(isset($avatars[$login])) $avatar = $avatars[$login];
    else $avatar = '';

    Почитай ещё описание цикла foreach в мануале php
     
  7. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    да как работаю циклы и фунции я понимаю,
    мне не понятны твой стиль написания,
    или это уже ближе к ООП

    PHP:
    1.  
    2. $out[$row[0]] = $row[1];
    3.  
    4. $login => $password
    5.  
    6. "Аватара: {$avatar};
    7.  
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Тут нет ни строчки ООП.
    По поводу первых двух строк - перечитай мой предыдущий ответ снова, там всё расписано.
    "Аватара: {$avatar}" - абсолютно тоже самое, что и 'Аватара: ' . $avatar;
     
  9. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    а эта строчка

    PHP:
    1.  
    2. echo("Аватара: {$avatar}; Логин: {$login}; Пароль: {$password}<br />\r\n");
    3.  
    это то же самое что эта строчка

    PHP:
    1.  
    2. echo "Аватара:".$avatar."Логин:".$login."Пароль".$password."<br />\r\n";
    3.  
    ну блин ребусы
     
  10. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    это чего php 7
     
  11. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    да, одно и тоже.
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    это php4, 5, ...
     
  13. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    это я примерно понял так
    мы забиваем оба текстовых файла в массив
    потом в foreach()
    выводим первый массив и в случаеи соответствия прикручивавем второй массив

    PHP:
    1.  
    2.  
    3. if(isset($avatars[$login]))
    4.         {
    5.         $avatar = $avatars[$login];
    6.         }
    7.         else
    8.         {
    9.         $avatar = '';
    10.         }
    11.  
    12.  
    ну с $avatar вроде разобрался
    ещё не понятно откуда $password появляется
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    $passwords появляется в первой строчке моего первого листинга
     
  15. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    ага хорошо
    вот ещё, а зачем

    //создаём новый элемент в массиве $out, ключём которого является $row[0], а значением $row[1]
    $out[$row[0]] = $row[1];
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Чтобы в первой строчке появился массив $passwords, а во второй $avatars.
    Пересмотри снова код. Внимательно.
     
  17. mihai

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

    С нами с:
    17 мар 2009
    Сообщения:
    40
    Симпатии:
    0
    хорошо спасибо тебе
    сечас попробую повнимательнее
    вроде так основу понял
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    mihai
    а можно кстати под это дело освоить работу с многомерными массивами. тут им самое место