В библиотеке имеются книги, газеты, журналы. Для каждого печатного издания указать
название;
год выпуска (для книги), дату выпуска (для газет и журналов);
автора (для книги), редактора (для газеты), редколлегию (для журнала);
объем.
Вывести информацию об изданиях, вышедших в заданном году.
есть такой код, но он не работает, что исправить можно? или как по-другому вывод сделать?
<?php
$bibl = array(
array(
'Дубровский',
'GodV'=>'1896',
'Autor'=>'А. С. Пушкин',
'Obem'=>'90 страниц',
),
array(
'Name'=>'Космополитан',
'GodV'=>'20.12.2019',
'Autor'=>'В. А. Алексеева',
'Obem'=>'100 страниц',
),
array(
'Name'=>'Труд',
'GodV'=>'12.05.2007',
'Autor'=>'П. Р. Смолов',
'Obem'=>'20 страниц',
),
);
foreach ($bibl as $value) {
if (strpos(strtolower($value['GodV']), strtolower($findme))) {
echo 'Название:'.$value['Name'].'';
echo 'Год выпуска/дата выпуска:'.$value['GodV'].'';
echo 'Автор/редактор/редколлегия:'.$value['Autor'].'';
echo 'Объем:'.$value['Obem'].'';
}
}
?>
PHP
Работа в php, помогите, пожалуйста
Чтобы вывести информацию по заданным параметрам нужно использовать базы данных (самая часто используемая mysql), это их главная задача. Там делаешь выборку по дате и получаешь результат. Результат выводишь через цикл Foreach.
В том виде, что сейчас в дальнейшем работать будет уже невозможно. PHP отличное можно работать с данными, но хранить там же данные, плохая идея.
Если не брать в решение БД, то просто в GodV оставь исключительно год выпуска (день и месяц удаляй). Если важно по дате, месяце и году то преобразуй в timestamp и сравнивай с текущей датой

В том виде, что сейчас в дальнейшем работать будет уже невозможно. PHP отличное можно работать с данными, но хранить там же данные, плохая идея.
Если не брать в решение БД, то просто в GodV оставь исключительно год выпуска (день и месяц удаляй). Если важно по дате, месяце и году то преобразуй в timestamp и сравнивай с текущей датой

Юрий Коновалов
спасибо большое!!!!
Называть что-то на русском в ЯП ужаснейшая идея - путаться будете легко. Если не знаете английский, то программировать ужаснейшая идея - запоминать названия ф-ций сложно будет.
По поводу кода...
Ну, во первых, синтаксически ошибок здесь нет, уже хорошо. Проблема может быть в том, что переменная $findme используется, но не задана, соответственно результат выражения if всегда будет false.
А так, всё выводится, если искать по году и только. Если искать по полной дате же (а у вас она называется GodV, а не pubDate или хотя бы DataV), то strpos будет возвращять 0, так как $findme и $value["GodV"] имеют одинаковое начало. А 0 приравнивается к false. Сделайте if(strpos(strtolower($value['GodV']), strtolower($findme)) === false) и код заработает.
> echo 'Название:'.$value['Name'].'';
Строки в echo объеденять не обязательно, достаточно разделить их запятой:
echo 'Название:', $value['Name'], '';
Но зачем добавлять пустое значение? Быть может стоит добавить в конец \n?
echo 'Название:', $value['Name'], "\n";
Кстати, экранирование работает только в литералах с двойными кавычками. А знаете что ещё там работает? Интерполяция! Вместо того, чтобы писать объединения или запятые, можно просто:
echo "Название: $value[Name]\n";
> $bibl = array(...);
В PHP уже бульйон лет можно писать $bibl = [...];
> ?>
И писать закрывающий тег не нужно, если в файле только PHP код. В PHTML-шаблонах, да, нужно его писать.
По поводу кода...
Ну, во первых, синтаксически ошибок здесь нет, уже хорошо. Проблема может быть в том, что переменная $findme используется, но не задана, соответственно результат выражения if всегда будет false.
А так, всё выводится, если искать по году и только. Если искать по полной дате же (а у вас она называется GodV, а не pubDate или хотя бы DataV), то strpos будет возвращять 0, так как $findme и $value["GodV"] имеют одинаковое начало. А 0 приравнивается к false. Сделайте if(strpos(strtolower($value['GodV']), strtolower($findme)) === false) и код заработает.
> echo 'Название:'.$value['Name'].'';
Строки в echo объеденять не обязательно, достаточно разделить их запятой:
echo 'Название:', $value['Name'], '';
Но зачем добавлять пустое значение? Быть может стоит добавить в конец \n?
echo 'Название:', $value['Name'], "\n";
Кстати, экранирование работает только в литералах с двойными кавычками. А знаете что ещё там работает? Интерполяция! Вместо того, чтобы писать объединения или запятые, можно просто:
echo "Название: $value[Name]\n";
> $bibl = array(...);
В PHP уже бульйон лет можно писать $bibl = [...];
> ?>
И писать закрывающий тег не нужно, если в файле только PHP код. В PHTML-шаблонах, да, нужно его писать.
Юрий Коновалов
прописала вот это if(strpos(strtolower($value['GodV']), strtolower($findme)) === false) и вот что он пишет мне

Похожие вопросы
- PHP MYSQL после ввода запроса , отображается пустая строка перед 1 кой, немогу понять Помогите пожалуйста
- Приветствую, помогите пожалуйста я правильно понял суть языка программирования ,PHP
- PHP Задача. Помогите пожалуйста. Всё написал в пояснении.
- Помогите пожалуйста задача по php)
- Помогите пожалуйста написать скрипт в perfect click
- Как заприватить территорию в майнкрафт? как запривать территорию в майнкрафт??? помогите пожалуйста
- PHP Polling ChatGPT
- Помогите с PHP кодом! Где косяк?
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге