Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拆分Wordpress自定义程序数组值_Php_Wordpress - Fatal编程技术网

Php 拆分Wordpress自定义程序数组值

Php 拆分Wordpress自定义程序数组值,php,wordpress,Php,Wordpress,目前,我正在重建我的网站,并使用Wordpress定制程序将一些特定于主页的数据设置到相应的部分 我已经在Wordpress后端准备好了数据,但是在前端我很难将数据分解 我能够获取数组中的所有Wordpress自定义值,并基于某个部分字符串的第一部分对其进行筛选 例如,我使用以下php代码过滤我的时间线项目: <?php $home_options = get_theme_mods(); foreach ($home_options as $key => $valu

目前,我正在重建我的网站,并使用Wordpress定制程序将一些特定于主页的数据设置到相应的部分

我已经在Wordpress后端准备好了数据,但是在前端我很难将数据分解

我能够获取数组中的所有Wordpress自定义值,并基于某个部分字符串的第一部分对其进行筛选

例如,我使用以下php代码过滤我的时间线项目:

<?php
    $home_options = get_theme_mods();

    foreach ($home_options as $key => $value) {
        if (strpos($key, "timeline_item") === 0) {
            echo '<strong>'.$key.'</strong> = '.$value.'<br />';
        }
    }
?>
这很好,我得到了我需要的所有时间线数据。但是,我想从这些数据中提取所有以
时间线\u项目\u 1 \u
开头的项目,并将它们捆绑到一个
,与
时间线\u项目\u 2 \u
等相同

所以问题是,我如何进一步拆分结果数组,并根据字符串的第一部分绑定属于彼此的所有项,以便最终结果如下所示

<div>
timeline_item_1_enable = 1
timeline_item_1_title = Test item 1
timeline_item_1_duration = 2010 - 2014
timeline_item_1_text = Test item 1 text
</div>
<div>
timeline_item_2_enable = 1
timeline_item_2_title = Test item 2
timeline_item_2_duration = 2014 - 2014
timeline_item_2_text = Test item 2 text
</div>
<div>
timeline_item_3_enable = 1
timeline_item_3_title = Test item 3
timeline_item_3_duration = 2010 - 2014
timeline_item_3_text = Test item 3 text
</div>
<div>
timeline_item_4_enable = 1
timeline_item_4_title = Test item 1
timeline_item_4_duration = 2010 - 2014
timeline_item_4_text = Test item 4 text
</div>

时间线\u项目\u 1\u启用=1
时间线项目标题=测试项目1
时间线项目持续时间=2010-2014
时间线项目1文本=测试项目1文本
时间线\u项目\u 2\u启用=1
时间线项目标题=测试项目2
时间线项目持续时间=2014年-2014年
时间线\项目\项目2 \文本=测试项目2文本
时间线\u项目\u 3\u启用=1
时间线项目3标题=测试项目3
时间线项目3持续时间=2010年至2014年
时间线项目3文本=测试项目3文本
时间线项目4启用=1
时间线项目4标题=测试项目1
时间线项目4持续时间=2010年至2014年
时间线项目4文本=测试项目4文本

您可以保留项目的最后一个索引,并检查添加
是否不同

$last_index=0;
如果(!空($home_选项)){
回声';
foreach($key=>$value的home_选项){
if(strpos($key,“时间线项目”)==0){
$idx=explode(“”,$key)[2];//获取项的索引
如果($idx!=$last_索引){
如果($last_index!=0){
回声';
}
$last_index=$idx;
}
回显“”.$key.=”.$value.“
”; } } 回声'; }
将提供以下产出:

<div>
  <strong>timeline_item_1_enable</strong> = 1<br />
  <strong>timeline_item_1_title</strong> = Test item 1<br />
  <strong>timeline_item_1_duration</strong> = 2010 - 2014<br />
  <strong>timeline_item_1_text</strong> = Test item 1 text<br />
</div>
<div>
  <strong>timeline_item_2_enable</strong> = 1<br />
  <strong>timeline_item_2_title</strong> = Test item 2<br />
  <strong>timeline_item_2_duration</strong> = 2014 - 2014<br />
  <strong>timeline_item_2_text</strong> = Test item 2 text<br />
</div>
<div>
  <strong>timeline_item_3_enable</strong> = 1<br />
  <strong>timeline_item_3_title</strong> = Test item 3<br />
  <strong>timeline_item_3_duration</strong> = 2010 - 2014<br />
  <strong>timeline_item_3_text</strong> = Test item 3 text<br />
</div>
<div>
  <strong>timeline_item_4_enable</strong> = 1<br />
  <strong>timeline_item_4_title</strong> = Test item 1<br />
  <strong>timeline_item_4_duration</strong> = 2010 - 2014<br />
  <strong>timeline_item_4_text</strong> = Test item 4 text<br />
</div>

时间线\u项目\u 1\u启用=1
时间线\u项目\u 1\u标题=测试项目1
时间线项目1持续时间=2010-2014
时间线项目1文本=测试项目1文本
时间线项目2\u启用=1
时间线项目2\u标题=测试项目2
时间线项目2持续时间=2014年-2014年
时间线项目2文本=测试项目2文本
时间线\u项目\u 3\u启用=1
时间线项目3\u标题=测试项目3
时间线项目3持续时间=2010-2014
时间线项目3文本=测试项目3文本
时间线项目4\u启用=1
时间线项目4\u标题=测试项目1
时间线项目4持续时间=2010-2014
时间线项目4文本=测试项目4文本


检查正则表达式。

您可以使用array\u chunk将数组拆分为四个,并使用preserve key true将每组四个循环成一个内部循环

Foreach(array_chunk($arr, 4, true) as $val){
    Echo "<div>\n";
    Foreach($val as $key => $v){
        echo '<strong>'.$key.'</strong> = '.$v."<br />\n";
    }
    Echo "</div>\n";
}
Foreach(数组\u块($arr,4,true)为$val){
回音“\n”;
Foreach($valas$key=>$v){
回显“”.$key.“=”.$v.“
\n”; } 回音“\n”; }

刚刚测试过,效果与预期一致!对我来说,这似乎是一个有效且相当“直截了当且故障安全”的解决方案。。。
<div>
  <strong>timeline_item_1_enable</strong> = 1<br />
  <strong>timeline_item_1_title</strong> = Test item 1<br />
  <strong>timeline_item_1_duration</strong> = 2010 - 2014<br />
  <strong>timeline_item_1_text</strong> = Test item 1 text<br />
</div>
<div>
  <strong>timeline_item_2_enable</strong> = 1<br />
  <strong>timeline_item_2_title</strong> = Test item 2<br />
  <strong>timeline_item_2_duration</strong> = 2014 - 2014<br />
  <strong>timeline_item_2_text</strong> = Test item 2 text<br />
</div>
<div>
  <strong>timeline_item_3_enable</strong> = 1<br />
  <strong>timeline_item_3_title</strong> = Test item 3<br />
  <strong>timeline_item_3_duration</strong> = 2010 - 2014<br />
  <strong>timeline_item_3_text</strong> = Test item 3 text<br />
</div>
<div>
  <strong>timeline_item_4_enable</strong> = 1<br />
  <strong>timeline_item_4_title</strong> = Test item 1<br />
  <strong>timeline_item_4_duration</strong> = 2010 - 2014<br />
  <strong>timeline_item_4_text</strong> = Test item 4 text<br />
</div>
<?php
    $home_options = get_theme_mods();
    $regex = '/([a-z]*)_([a-z]*)_(\d)_([a-z]*)/';
    $parts = [];

    foreach ($home_options as $key => $value) {
       preg_match_all($regex, $key, $matches, PREG_SET_ORDER, 0);
       /* $matches have the matches below
       Full match   0-22    `timeline_item_1_enable`
       Group 1. 0-8 `timeline`
       Group 2. 9-13    `item`
       Group 3. 14-15   `1`
       Group 4. 16-22   `enable`
       */  
        $pkey = 'timeline_item_'.$matches[0][3]; 
        if (!isset($parts[$pkey])) $parts[$pkey] = array($key => $val);
        else $parts[$pkey][$key] = $val;
    }

    foreach($parts as $pkey => $props) {
      echo '<div>';
      foreach($props as $key => $val) {
        echo $key . ' = ' . $val . '<br>';
      } 
      echo '</div>';
    } 
?>
Foreach(array_chunk($arr, 4, true) as $val){
    Echo "<div>\n";
    Foreach($val as $key => $v){
        echo '<strong>'.$key.'</strong> = '.$v."<br />\n";
    }
    Echo "</div>\n";
}