Динамическое нахождение определенного индекса массива - PullRequest
0 голосов
/ 25 сентября 2019

Я должен начать с извинения, потому что этот вопрос является относительно простым.У меня есть большой многомерный массив с несколькими экземплярами # options indexes.Ниже приведен пример одного массива:

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 index.

Я пытаюсь выяснить, как найти и получитьданные во всех случаях # опции .

Может кто-нибудь дать мне несколько советов, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Вы можете попробовать что-то вроде рекурсивной функции

Вот простой пример для приведенного выше случая.

$alloptions = array();
function seach($searcharray){
    foreach($searcharray as $key=>$value){
       if($key == '#options'){
       $alloptions[] = $searcharray[$key];
       }else if(is_array($value)){
           seach($value);
       }
    }
}
0 голосов
/ 25 сентября 2019

Я бы предложил повторить набор элементов формы и проверить, существует ли внутренний ключ #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 может появиться на более глубоком уровне, рекурсивный поиск может справиться с этим, но если нет, я думаю, что лучше сделать его простым.

...