动态查找特定的数组索引

问题描述 投票:0回答:2

我必须道歉,因为这个问题是一个相对简单的问题。我有一个大型多维数组,其中多次出现#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中查找和检索数据。

有人可以给我一些建议吗?
php arrays php-7
2个回答
0
投票
我建议迭代一组表单元素并检查是否存在内部#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可能出现在更深的层次上,则递归搜索可以处理该嵌套,但是如果没有,我认为最好保持简单。

0
投票
您可以尝试类似递归的功能

这是上述情况的简单示例。

$alloptions = array(); function seach($searcharray){ foreach($searcharray as $key=>$value){ if($key == '#options'){ $alloptions[] = $searcharray[$key]; }else if(is_array($value)){ seach($value); } } }

© www.soinside.com 2019 - 2024. All rights reserved.