【问题标题】:Dynamically finding a particular array index动态查找特定数组索引
【发布时间】:2020-01-25 02:32:02
【问题描述】:

我有一个大型多维数组,其中多次出现#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


    【解决方案1】:

    我建议迭代表单元素集并检查内部 #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 可能出现在更深层次,递归搜索可以处理,但如果没有,我认为最好保持简单。

    【讨论】:

      【解决方案2】:

      你可以试试递归函数

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 2018-11-22
        • 1970-01-01
        • 2016-01-05
        • 2018-04-24
        • 2023-04-02
        • 2022-11-02
        • 1970-01-01
        相关资源
        最近更新 更多