我必须道歉,因为这个问题是一个相对简单的问题。我有一个大型多维数组,其中多次出现#options索引。以下是单个数组示例:
FORM => Array
(
[#attached] => Array
(
[library] => quiz/quiz-form-styling
)
[text_0] => Array
(
[#type] => markup
[#markup] =>
Wherelese did Walter White work besides being a teacher?
)
[radio_1] => Array
(
[#type] => radios
[#options] => Array
(
[0] => An elder Care home
[1] => [A car wash]
[2] => A beauty saloon
[3] => For Skylers old boss
)
[#correct] => testing_correct_for radio
)
[text_2] => Array
(
[#type] => markup
[#markup] =>
)
)
在上面的示例中,#options的父数组是radio_1。但这并非总是如此,因为数组是动态生成的。无法预先知道父索引是什么,但是总有一个#options索引。
我想弄清楚的是如何在所有出现的[[#options中查找和检索数据。
有人可以给我一些建议吗?#options
键。如果是这样,您可以将选项添加到所有选项的数组中。$all_options = [];
foreach ($form_elements as $name => $settings) {
if (isset($settings['#options'])) {
$all_options[$name] = $settings['#options'];
}
}
我在示例代码中将元素名称用作键,因为我认为知道选项的来源似乎很方便,但是您不必那样做。如果只想将它们全部放在一个大列表中,则可以将它们合并到$all_options
上,而不是附加它们。
$all_options = array_merge($all_options, $settings['#options']);
这是假设FORM下的每个值都是代表一个表单元素的数组。如果存在任何嵌套,使得#options
可能出现在更深的层次上,则递归搜索可以处理该嵌套,但是如果没有,我认为最好保持简单。
这是上述情况的简单示例。
$alloptions = array();
function seach($searcharray){
foreach($searcharray as $key=>$value){
if($key == '#options'){
$alloptions[] = $searcharray[$key];
}else if(is_array($value)){
seach($value);
}
}
}