1
// 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!!!
4

5 に答える 5

0

その多次元配列は私には美しく見えません。それは混乱のように見えます。これはより論理的に思えます:

public $form = array (
            'field' => 'email',
            'params' => 
              array(
                array(
                    'rule' => 'email',
                    'on' => 'create',
                    'required' => true,
                    ),
                array(
                    'rule' => 'email',
                    'on' => 'update',
                    'required' => false,
                    )
                )
        );
于 2009-05-11T18:50:27.807 に答える
0

2番目のループでエラーを生成するように見えます:

foreach ($ValueA as $ValueB) {

これはfieldループに含まれ、配列としてアクセスしようとすると問題が発生します。

また、3番目のループが次のようになることを意味していると思います:

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']);
        }
    }
}
于 2009-05-11T18:51:11.940 に答える
0

このページには、for ループを使用して多次元配列の要素にアクセスする例がいくつかあります: http://www.webcheatsheet.com/PHP/multidimensional_arrays.php

于 2009-05-11T18:30:19.460 に答える
0

たとえば$valueX、あなたのケースにあるものをデバッグしてみてください。var_dump()

foreach($array as $key => $value)あなたが探しているものかもしれません

于 2009-05-11T19:27:57.400 に答える