Есть две текстовые базы. bd_1.txt в первом файле записываются Код (Text): login::pass bd_2.txt во втором файле записываются логин и аватор этого пользователя Код (Text): login::avat.gif как вывести в одном цикле значения из обоих файлов txt. чтобы на странице всё совпадало. каритнка аватора - логин - пароль
PHP: <?php $passwords = doArray(file('bd_1.txt'), '::'); $avatars = doArray(file('bd_2.txt'), '::'); foreach($passwords as $login => $password) { $avatar = isset($avatars[$login]) ? $avatars[$login] : ''; echo("Аватара: {$avatar}; Логин: {$login}; Пароль: {$password}<br />\r\n"); } function doArray($input = array(), $sep = ';') { $out = array(); foreach($input as $str) { $str = trim($str); $row = explode($sep, $str); $out[$row[0]] = $row[1]; } return($out); } ?>
Всё очень хорошо вот только бы хотелось узнать как это работает если есть минуточка прокоментрирй пожалуйста код. И если можно это как то попроще оформить. У меня ни чего не понимается. PHP: <?php //создаём функцию function doArray($input = array(), $sep = ';') { //создаём пустой массив $out = array(); //перебираем полученный массив и присваивем каждому элементу массива значение $str[] foreach($input as $str) { $str = trim($str); //разбиваем строку на $str с разделителем $sep $row = explode($sep, $str); //ВОТ ЭТО НЕ ПОНЯТНО ЧТО ЗА ХРЕНЬ $out[$row[0]] = $row[1]; } //выводим return($out); } //подключаем функцию doArray() $passwords = doArray(file('bd_1.txt'), '::'); //подключаем функцию doArray() $avatars = doArray(file('bd_2.txt'), '::'); //а вот ниже вообще ТАНК ... foreach($passwords as $login => $password) { $avatar = isset($avatars[$login]) ? $avatars[$login] : ''; echo("Аватара: {$avatar}; Логин: {$login}; Пароль: {$password}<br />\r\n"); } ?>
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
да как работаю циклы и фунции я понимаю, мне не понятны твой стиль написания, или это уже ближе к ООП PHP: $out[$row[0]] = $row[1]; $login => $password "Аватара: {$avatar};
Тут нет ни строчки ООП. По поводу первых двух строк - перечитай мой предыдущий ответ снова, там всё расписано. "Аватара: {$avatar}" - абсолютно тоже самое, что и 'Аватара: ' . $avatar;
а эта строчка PHP: echo("Аватара: {$avatar}; Логин: {$login}; Пароль: {$password}<br />\r\n"); это то же самое что эта строчка PHP: echo "Аватара:".$avatar."Логин:".$login."Пароль".$password."<br />\r\n"; ну блин ребусы
это я примерно понял так мы забиваем оба текстовых файла в массив потом в foreach() выводим первый массив и в случаеи соответствия прикручивавем второй массив PHP: if(isset($avatars[$login])) { $avatar = $avatars[$login]; } else { $avatar = ''; } ну с $avatar вроде разобрался ещё не понятно откуда $password появляется
Говорят, использование двойных кавычек с несколькими переменными внутри - быстрее, чем несколько операторов конкатенации (точка).
ага хорошо вот ещё, а зачем //создаём новый элемент в массиве $out, ключём которого является $row[0], а значением $row[1] $out[$row[0]] = $row[1];
Чтобы в первой строчке появился массив $passwords, а во второй $avatars. Пересмотри снова код. Внимательно.