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

此页面有一些使用 for 循环访问多维数组元素的示例:http ://www.webcheatsheet.com/PHP/multidimensional_arrays.php

于 2009-05-11T18:30:19.460 回答
0

尽管这些数组很“漂亮”,但在我看来,这确实像是一个类会更擅长的东西,而且处理起来会容易得多。

于 2009-05-11T18:32:20.237 回答
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

在我看来,您将在第二个循环中生成错误:

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

例如,尝试调试$valueX您的情况var_dump()

可能foreach($array as $key => $value)是你在找什么

于 2009-05-11T19:27:57.400 回答