VV
Vladimir Vishnevsky

Работа в 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'].'';
}
}

?>

АШ
Алексей Шивыдкин

Чтобы вывести информацию по заданным параметрам нужно использовать базы данных (самая часто используемая mysql), это их главная задача. Там делаешь выборку по дате и получаешь результат. Результат выводишь через цикл Foreach.

В том виде, что сейчас в дальнейшем работать будет уже невозможно. 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-шаблонах, да, нужно его писать.

Похожие вопросы
Нужна помощь с php
Проблема со временем в php
Буфер обмена в PHP
Как решить эту задачу на PHP?
Программисты помогите PHP неизвестная ошибка!
Помогите с созданием скрипта (changer'a) на php или javascript
Использование cookie в php
Как решить эту задачу на PHP?
Помогите начинающему php back end разработчику
Помогите найти ошибку в php