【发布时间】:2015-08-04 12:31:09
【问题描述】:
我正在创建一个类来帮助构建 WordPress 插件的设置页面。开发人员通过传入一组设置来实例化该类。一个基本示例如下所示:
Array
(
[textbox1] => Array
(
[title] => Textbox
[type] => text
[section] => general
[desc] => The text description
)
[a_nice_dropdown] => Array
(
[title] => Select me
[type] => select
[section] => general
[desc] => The select description
[choices] => Array
(
[red] => Red
[blue] => Blue
[green] => Green
)
)
)
这很好用。我的班级构建了选项页面,输入的 HTML 如下所示:
<input id="textbox1" type="text" name="options_slug[textbox1]" value="">
当点击“保存更改”时,我的班级会抓取与“options_slug”相关的所有选项,并将它们作为一个很好的序列化数组存储在一个 wp_options 条目中,以便以后轻松抓取。
新挑战
我有一个需要多个嵌套“中继器”字段的新项目,类似于高级自定义字段的处理方式。我创建了一个新的字段类型来处理这个,它可以支持“子字段”。示例配置输出(来自 error_log)如下所示:
Array
(
[subfields_container] => Array
(
[title] => Subfields
[type] => subfields
[section] => general
[desc] => This is the subfields description text
[subfields] => Array
(
[textbox2] => Array
(
[title] => Textbox
[type] => text
[section] => general
[desc] => The text description
)
[select1deep] => Array
(
[title] => Subfield Select
[type] => select
[choices] => Array
(
[1] => 1
[2] => 2
[3] => 3
)
[std] => 1
)
)
)
)
我已经配置了 HTML 输出,因此“子字段”容器内的输入现在看起来像:
<input id="textbox1" type="text" name="options_slug[subfields_container][textbox2]" value="">
这个想法是最终用户可以轻松地对字段进行分组:即,
$options = get_option('options_slug');
foreach($options['subfield_container'] as $subfield) {
// etc...
}
问题
当我遍历这些多维数组时,我需要不断更新当前索引处的 $options 变量,以便将其保存到数据库中。所以以前我能做到的地方:
$id = 'textbox1';
$options[$id] = $_POST['textbox1'];
现在我正在做类似的事情:
$id = array('subfields_container' => 'textbox2');
$options[$id] = $_POST['textbox2'];
但我收到“非法偏移类型”错误。因为我无法使用另一个数组设置数组属性。
我考虑过只在 ID 中添加破折号,而不是创建分层数组,例如:
<input id="textbox1" type="text" name="options_slug[subfields_container-textbox2]" value="">
但是我将失去对存储选项的特定部分进行 foreach 的能力。
问题
当数组的结构不固定时,在多维数组中动态设置值的最佳方法是什么?
谢谢
【问题讨论】:
-
您可能应该查找此类的类,对象类似于数组,但您可以创建简化设置属性值的方法。
标签: php arrays wordpress multidimensional-array