PHP - 针对每个循环问题

时间:2011-12-07 12:11:52

标签: php arrays wordpress foreach meta-boxes

在Wordpress中,我试图从头开始创建一个元文件脚本,以便更好地理解Wordpress和PHP。

虽然我在多维数组上的每个循环都遇到了一些问题。我正在使用PHP5。

这是数组:

$meta_box = array();    
$meta_box[] = array(
            'id' => 'monitor-specs',
            'title' => 'Monitor Specifications',
            'context' => 'normal',
            'priority' => 'default',
            'pages' => array('monitors', 'products'),
            'fields' => array(
                array(
                    'name' => 'Brand',
                    'desc' => 'Enter the brand of the monitor.',
                    'id' => $prefix . 'monitor_brand',
                    'type' => 'text',
                    'std' => ''
                )
            )
        );

这是每个循环:

foreach ($meta_box['pages'] as $post_type => $value) {
            add_meta_box($value['id'], $value['title'], 'je_format_metabox', $post_type, $value['context'], $value['priority']);
        }

我要做的是循环遍历'pages'数组中的键,这是'meta_box'数组中的一个数组,同时能够使用'meta_box'数组的键值。

我是否需要为每个循环嵌套一些?

非常感谢正确方向的一些指示,所以我可以解决这个问题。

5 个答案:

答案 0 :(得分:1)

foreach$meta_box['pages']开头,但没有$meta_box['pages']

你确实有$meta_box[0]['pages'],所以你需要两个循环:

foreach($meta_box as $i => $box)
    foreach($box['pages'] as $page)
        add_meta_box(.., ..); // do whatever

您期望在$value变量中出现什么?

答案 1 :(得分:1)

foreach ($meta_box[0]['pages'] as $post_type => $value) {

$meta_box = array(...

答案 2 :(得分:1)

这里:

$meta_box = array();    
$meta_box[] = array(......

表示没有$ meta_box ['pages']。 meta_box是一个带有数字索引的数组(检查[]运算符),它的每个元素都是一个包含键'pages'的数组。

所以你需要在$ meta_box上使用foreach,并且在每个元素上你需要使用pages key .. id,title,context是与页面在同一级别的元素,如你所见

答案 3 :(得分:1)

您正在引用错误的数组键

$meta_box[] <-- $meta_box[0]

但是,你引用的是: -

foreach ($meta_box['pages'] as $post_type => $value) {

添加数组键将解决问题: -

foreach ($meta_box[0]['pages'] as $post_type => $value) {

答案 4 :(得分:1)

创建一些类来保存这些信息可能会很好。

class Metabox
{
  public $id, $title, $context, $priority, $pages, $fields;

  public function __construct($id, $title, $pages, $fiels, $context='normal', $priority='default')
  {
    $this->id = $id;
    $this->title = $title;
    $this->pages = $pages;
    $this->fields = $fields;
    $this->context = $context;
    $this->priority = $priority;
  }

}

$meta_box = array();

$meta_box[] = new Metabox(
  'monitor-specs', 
  'Monitor Specifications', 
  array('monitors', 'products'),
  array(
    'name' => 'Brand',
    'desc' => 'Enter the brand of the monitor.',
    'id' => $prefix . 'monitor_brand',
    'type' => 'text',
    'std' => ''
  )
);

现在,您可以遍历meta_box数组,如:

foreach ($meta_box as $box)
{
  add_meta_box($box->id, $box->title, .. and more)
  // This function could be placed in the metabox object

  /* Say you want to access the pages array : */
  $pages = $box->pages;

  foreach ($pages as $page)
  {
    ..
  }
}

现在你仍然有一个循环循环,但也许有助于更清楚地看到你的问题。