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