Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2017, 14:33   #1
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
Подмигивание Вывод текстовых строк по итерации

Добрейший денёчек всем постояльцам и просто мимо пробегающим знатокам, я вернулся с очередным, непростым для меня вопросом.

Имеется код:

Код:
<?php
$arr = scandir('./assets/components/images/glav');
foreach($arr as $v) {
if(stripos($v,'.jpg')) echo 
'
<li class="col-md-4 col-sm-4 col-xs-6">
<div class="content-image-block">
<img alt="" src="http://lc-omega.ru/assets/components/images/glav/'.$v.'">
<div class="content-block-hover">
<h5>Автор</h5>
<p>Описание</p>
<a title="" href="http://lc-omega.ru/assets/components/images/glav/'.$v.'" class="zoom"><i class="fa fa-search"></i></a>
<a title="" href="#"><i class="fa fa-external-link"></i></a>
</div>
</div>
</li>
';
}
Он выполняет вывод картинок из папки.
Задача: В папке находиться файл text.txt в файле 12 строк, необходимо, что бы при выводе каждой картинки вместо "Автор" и "Описание" выводились 1 и 2 строчка, далее 3 и 4 и так далее соответственно.
___
Сам решить вопрос не могу, надеюсь на вашу помощь
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 27.12.2017, 15:20   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Способ хранения авторов и описаний в файле без четкой привязки к конкретному изображению – глупый и неэффективный, наугад что называется.

Но если мсье таки предпочитает ..овнокодить – то вот примерный алгоритм действий:
1. Читай файл в массив, где каждый элемент – это строка файла. (file)
2. Пройди по этому массиву циклом (for или foreach) – и проверяй ключи на предмет деления по модулю на 2 (см. первый комментарий по ссылке в качестве примера).
Так можно определить четные и нечетные элементы массива.
Нечетный элемент – Автор, четный элемент – Описание.
3. В этом же цикле сформируй «рабочий» массив (можно два отдельных) c авторами и описаниями.
4. Далее в своём цикле foreach($arr as $v) добавь определение ключа, и по нему извлекай нужного автора и описание из созданного «рабочего массива»:
PHP код:
<?php
foreach($arr as $k => $v) {
    
// ...
?>
    <h5><?= $file_info['authors'][$k]; ?></h5>
    <p><?= $file_info['descriptions'][$k]; ?></p>
<?php
    
// ...
}
?>
Andkorol вне форума Ответить с цитированием
Старый 27.12.2017, 15:59   #3
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Выполняю эту задачу с целью максимально упростить работу с динамическими блоками для будущего владельца, дабы ему не приходилось лезть в админку, а просто открывать текстовик и менять там текст. Мне кажется это самый простой и понятный способ)
Попробую сделать, спасиб, отпишусь о прогрессе.
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 27.12.2017, 16:06   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от maks1331 Посмотреть сообщение
Выполняю эту задачу с целью максимально упростить работу с динамическими блоками для будущего владельца, дабы ему не приходилось лезть в админку
вполне может получится медвежья услуга.
удалите пару первых картинок jpg. потом опять запишите их же, в ту же папку.
и всё. Содержимое текстового файла перестанет соответствовать найденным картинкам.
Как правильно сказал выше Andkorol
Цитата:
Сообщение от Andkorol Посмотреть сообщение
Способ хранения авторов и описаний в файле без четкой привязки к конкретному изображению – глупый и неэффективный, наугад что называется.
но это, конечно, ваше дело.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2017, 16:06   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от maks1331 Посмотреть сообщение
Выполняю эту задачу с целью максимально упростить работу с динамическими блоками для будущего владельца, дабы ему не приходилось лезть в админку, а просто открывать текстовик и менять там текст. Мне кажется это самый простой и понятный способ)
Лезть на сервер по FTP, менять малопонятное содержимое в перспективе возможно немаленького txt-файла – всё вот это проще и удобнее, чем войти в Админку и отредактировать конкретную запрошенную строку для конкретной картинки?!?!?!?
Andkorol вне форума Ответить с цитированием
Старый 27.12.2017, 16:25   #6
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Картинки выводятся из папки в алфавитном порядке, в процессе понимания "что к чему относится" вопросов появляться не должно. Хотя, возможно вы и правы и стоит сделать иначе, всё равно дальше чтения файла в массив я пока не зашёл)
______
но задача лично для меня стала интересной, надо всё таки разобраться.

Код:
<?php
$lines = file('./assets/components/images/glav/text.txt');
$arr = scandir('./assets/components/images/glav');
foreach ($lines as  $line) {
    echo "";
}
foreach($arr as $keys => $v) {
$keys = array('authors', 'descriptions');
if(stripos($v,'.jpg')) echo 
'
<li class="col-md-4 col-sm-4 col-xs-6">
<div class="content-image-block">
<img alt="" src="http://lc-omega.ru/assets/components/images/glav/'.$v.'">
<div class="content-block-hover">
<h5>Автор</h5>
<p>Описание</p>
<a title="" href="http://lc-omega.ru/assets/components/images/glav/'.$v.'" class="zoom"><i class="fa fa-search"></i></a>
<a title="" href="#"><i class="fa fa-external-link"></i></a>
</div>
</div>
</li>
';
}
[Выделено] Я записал файл в массив по строкам - окей.
Поправил первый, как я понимаю, цикл: ($arr as $keys => $v)
и добавил ключи $keys = array('authors', 'descriptions');
А вот как перебрать имеющийся массив $lines по чётным и нечётным строками с записью соответствующих в массивы автор и описание, а далее вывод необходимых элементов в основном цикле - у меня голова кипит.
(Не ругайтесь, я самоучка в этом деле и с php работаю крайне редко)
формошлеп.рф
witech.su

Последний раз редактировалось maks1331; 27.12.2017 в 16:35.
maks1331 вне форума Ответить с цитированием
Старый 27.12.2017, 17:13   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

PHP код:
$file file('./text.txt'FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
$file_info = array(
    
'authors' => array(),
    
'descriptions' => array(),
);
if(!empty(
$file)){
    foreach (
$file as $key => $value) {
        if((
$key 2) == 0){
            
$file_info['authors'][] = $value;
        }
        else {
            
$file_info['descriptions'][] = $value;
        }
    }

Получаем массив такого вида:
Код:
Array
(
    [authors] => Array
        (
            [0] => Author 1
            [1] => Author 2
            [2] => Author 3
            [3] => Author 4
        )

    [descriptions] => Array
        (
            [0] => Description 1
            [1] => Description 2
            [2] => Description 3
            [3] => Description 4
        )

)
Доступ к элементам массива я описал ранее.
Andkorol вне форума Ответить с цитированием
Старый 27.12.2017, 17:20   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

без массивов, в лоб - берём нужные строчки (если они там есть в массиве) и подставляем.
пробуйте:
Код:
<?php
$dir    = './assets/components/images/glav/';
$lines = file($dir.'text.txt');
$files1 = array_filter( scandir($dir), function($v) { return stripos($v,'.jpg');});
$k=0;
foreach($files1 as $f){
	if($k<(count($lines)-1)){
		$autor=$lines[$k++];
		$descr=$lines[$k++];
	}
	else{
		$autor='unknown autor';
		$descr='empty desc';
	}
?>
<li class="col-md-4 col-sm-4 col-xs-6">
<div class="content-image-block">
<img alt="" src="http://lc-omega.ru/assets/components/images/glav/<?=$f?>">
<div class="content-block-hover">
<h5><?=$autor?></h5>
<p><?=$descr?></p>
<a title="" href="http://lc-omega.ru/assets/components/images/glav/<?=$f?>" class="zoom"><i class="fa fa-search"></i></a>
<a title="" href="#"><i class="fa fa-external-link"></i></a>
</div>
</div>
</li>
<?php
}
?>


Добавлено
упс. я опоздал...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2017, 17:51   #9
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Огромное спасибо, всё работает как часы.
Единственное, ошибка кодировки есть)
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 27.12.2017, 17:54   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от maks1331 Посмотреть сообщение
Единственное, ошибка кодировки есть)
нужно всё привести к единой кодировке utf-8
и сам файл text.txt и PHP скрипт и тот html, который генерите (
Код HTML:
<html>
  <head>
    <meta charset="utf-8">
  </head>
....
)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение и удаление части текстовых строк strannick Microsoft Office Excel 5 18.10.2013 19:36
Сравнение строк двух текстовых файлов Alina111 Общие вопросы C/C++ 4 10.01.2013 10:03
Обработка текстовых строк Funy Помощь студентам 1 15.12.2011 17:39
Обработка текстовых строк Funy Помощь студентам 0 13.12.2011 14:16
Как посчитать сумму строк во всех текстовых файлах? qwestor PHP 8 30.12.2007 16:02