Как я могу заставить этот многомерный массив и эти циклы foreach работать вместе? - PullRequest
1 голос
/ 11 мая 2009
// a beautiful multidimensional array

public $form = array (
        array(
            'field' => 'email',
            array(
                'params' => 
                array(
                    'rule' => 'email',
                    'on' => 'create',
                    'required' => true,
                    ),
                ),
            array(
                'params' =>
                array(
                    'rule' => 'email',
                    'on' => 'update',
                    'required' => false,
                    )
                )
            )
        );

// beautiful foreach loops

public function validate($form) {
    foreach ($form as $valueA) {
        $field = $valueA['field'];

        foreach ($valueA as $valueB) {
            $params = $valueB['params'];

            foreach ($valueB as $valueC) {
                $rule = $valueC['on'];
                $on = $valueC['on'];
                $required = $valueC['required'];

                $this->isValid($field, $rule, $on, $required);
            }
        }
    }
}

// they do not work together!!!

Ответы [ 5 ]

0 голосов
/ 11 мая 2009

Попробуйте отладить то, что $valueX в вашем случае, например, с var_dump().

Может быть foreach($array as $key => $value) это то, что вы ищете

0 голосов
/ 11 мая 2009

Мне кажется, что вы будете генерировать ошибки во втором цикле:

foreach ($ValueA as $ValueB) {

Это включит field в цикл и столкнется с проблемами при попытке доступа к нему в виде массива.

Кроме того, я думаю, что вы подразумеваете, что ваш третий цикл будет:

foreach ($params as $ValueC) {

В противном случае он сталкивается с теми же проблемами, что и средний цикл.

Я думаю, что если вы намерены продолжать использовать это как массив, а не преобразовывать его в класс, как предлагали другие, вы должны реструктурировать его так, чтобы все названные данные были на одном уровне. Обратите внимание, что это уменьшает сложность как массива (немного), так и циклов (много).

public $form = array (
    array(
        'field' => 'email',
        'params' => array(
            array(
                'rule' => 'email',
                'on' => 'create',
                'required' => true,
            ),
            array(
                'rule' => 'email',
                'on' => 'update',
                'required' => false,
            )
        )
    )
);

public function validate($form) {
    foreach ($form as $field_params) {
        $field = $field_params['field'];

        foreach ($field_params['params'] as $param) {
            $this->isValid($field, $param['rule'], $param['on'], $param['required']);
        }
    }
}
0 голосов
/ 11 мая 2009

Какими бы «красивыми» ни были эти массивы, мне кажется, что класс лучше, и это было бы намного проще обрабатывать.

0 голосов
/ 11 мая 2009

Этот многомерный массив не выглядит красивым для меня. Это похоже на беспорядок. Это кажется гораздо более логичным:

public $form = array (
            'field' => 'email',
            'params' => 
              array(
                array(
                    'rule' => 'email',
                    'on' => 'create',
                    'required' => true,
                    ),
                array(
                    'rule' => 'email',
                    'on' => 'update',
                    'required' => false,
                    )
                )
        );
0 голосов
/ 11 мая 2009

На этой странице есть несколько примеров использования циклов for для доступа к элементам многомерного массива: http://www.webcheatsheet.com/PHP/multidimensional_arrays.php

...