PHP Foreach для массива внутри другого массива

Я не знал, какой заголовок использовать, потому что это довольно необычная ситуация. Пожалуйста, позвольте мне объяснить. У меня есть сайт с несколькими страницами, и у каждого есть разные метатеги, такие как заголовок, описание и ключевые слова. Итак, я сделал этот код:

define('title', 0);
define('keywords', 1);
define('desc', 2);

$tags = array(
'index'    => array('My site', 'php, tricks', 'My site about php'),
'about'    => array('About', 'etc, about', 'About this site'),
'other'    => array('Other', 'some, shit', 'Some other shit')
);

Страницы моего сайта выглядят так: mysite.com/index, mysite.com/aboutи т. д. и, следовательно, у меня есть каталог со всеми теми страницами, которые названы index.php, about.php и так далее. Поэтому, если я хочу добавить новую страницу с именем contact, я должен создать файл с именем contact.php и добавьте новую строку в мой массив следующим образом:

$tags = array(
'index'    => array('My site', 'php, tricks', 'My site about php'),
'about'    => array('About', 'etc, about', 'About this site'),
'other'    => array('Other', 'some, shit', 'Some other shit'),
'contact'  => array('Contact', 'contact, whatever', 'Contact form')
);

Это работает отлично до сих пор. Тем не менее, теперь у меня есть группа страниц, которые начинаются с column- и я хочу, чтобы они автоматически добавляли свои теги, не добавляя больше строк в код. Что-то вроде этого:

$tags = array(
'index'    => array('My site', 'php, tricks', 'My site about php'),
'about'    => array('About', 'etc, about', 'About this site'),
'other'    => array('Other', 'some, shit', 'Some other shit'),
$column_pages  => array($col_title, $col_keywords, $col_desc)
);

Я предполагаю, что я должен просканировать мой каталог на наличие файлов, чтобы сначала получить имена, а затем отфильтровать те, которые начинаются с «column-»:

$column_page = scandir("content");
foreach ($column_page as $value) {
if(preg_match("/column/i", $value)) {
$column_pages = $value;
}
}

но после этого я вроде застрял, и у меня нет идеи, как идти дальше. Что мне теперь делать?

Что мне нужно , чтобы выразить это ясными словами, я хочу просканировать все имена файлов в определенной папке / каталоге, проверить, начинается ли его имя с column- а затем генерировать атрибуты автоматически с помощью PHP

Например, Предполагая, что на данный момент у меня есть 3 файла, начинающиеся с «column-«, которые:
column-news, column-variety а также column-radio; мой ожидаемый результат — это то, что работает точно так же, как этот код ниже:

$tags = array(
'index'    => array('My site', 'php, tricks', 'My site about php'),
'about'    => array('About', 'etc, about', 'About this site'),
'other'    => array('Other', 'some, shit', 'Some other shit'),
'column-news'  => array('News', 'some, news', 'Column with news'),
'column-variety'  => array('News', 'some, variety', 'Column with variety'),
'column-radio'  => array('News', 'some, radio', 'Column with radio')
);

Спасибо.

1

Решение

Вот один из способов сделать это

  • сканировать все каталоги

  • делать regex соответствует шаблону в имени файла

  • сохранить в массиве, если совпадение найдено

Код

$pattern = "/^column-*/i" //i for making it case insensitive, ^ denotes start of name
$path = "some/dir/path/";
$files = scandir($path);
foreach ($files as $file_name) {
if(preg_match($pattern, $file_name){
$column_pieces = explode("-", $file_name);
$tags = array($file_name  =>
array($column_pieces[0], $column_pieces[1], $column_pieces[2])
);
}
}

В этой строке кода:

$tags = array($file_name  =>
array($column_pieces[0], $column_pieces[1], $column_pieces[2])
);

$file_name будет вашим ключом и $column_pieces[XX] необязательно только для того, чтобы показать вам, как это будет сделано, вы можете сохранить в нем другие данные, которые вы можете получить из БД

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]