php Foreach为另一个数组内的数组

时间:2014-09-18 04:43:19

标签: php arrays 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/indexmysite.com/about等等,因此,我有一个目录,其中包含所有名为index.phpabout.phpcontact.php的页面等等。因此,如果我想添加一个名为contact的新页面,我必须创建一个名为$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_page = scandir("content");
foreach ($column_page as $value) {
  if(preg_match("/column/i", $value)) {
     $column_pages = $value;
  }
}

我想我应该扫描我的目录中的文件以获取名称,然后过滤那些以“column - ”开头的文件:

column-

但在此之后我有点卡住,我不知道如何进一步。我现在应该怎么做?

我需要的是,用清楚的话说,我想扫描特定文件夹/目录中的所有文件名,检查其名称是否以PHP开头,然后生成在column-news

的帮助下自动生成属性

例如,假设截至目前我有3个以“column-”开头的文件,分别是:column-varietycolumn-radio和{{1 }};我的预期结果与下面的代码完全相同:

$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 个答案:

答案 0 :(得分:0)

这是一种做法

  • 扫描所有目录

  • 执行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]只是为了向您展示如何完成,您可以在其中保存其他可以从DB获取的详细信息