Php 如何使这个多维数组和这些foreach循环一起工作?

Php 如何使这个多维数组和这些foreach循环一起工作?,php,foreach,multidimensional-array,Php,Foreach,Multidimensional Array,本页有一些使用for循环访问多维数组元素的示例:虽然这些数组很“漂亮”,但在我看来确实像是一个类更擅长的东西,而且处理起来更容易。多维数组在我看来并不漂亮。看起来一团糟。这似乎更符合逻辑: // a beautiful multidimensional array public $form = array ( array( 'field' => 'email', array( 'params'

本页有一些使用for循环访问多维数组元素的示例:

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

多维数组在我看来并不漂亮。看起来一团糟。这似乎更符合逻辑:

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

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

public $form = array (
            'field' => 'email',
            'params' => 
              array(
                array(
                    'rule' => 'email',
                    'on' => 'create',
                    'required' => true,
                    ),
                array(
                    'rule' => 'email',
                    'on' => 'update',
                    'required' => false,
                    )
                )
        );
这将在循环中包括
字段
,并且在尝试将其作为数组访问时会遇到问题

另外,我认为你的第三个循环是:

foreach ($ValueA as $ValueB) {
否则,它会遇到与中间循环相同的问题

我认为,如果您打算继续将其用作数组,而不是像其他人建议的那样将其重构为类,那么您应该对其进行重构,以便命名数据都处于同一级别。注意,这降低了数组(一点)和循环(很多)的复杂性


例如,尝试使用
var\u dump()
调试您案例中的
$valueX


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

为什么一切都这么“漂亮?”我正在尝试编写可维护的代码。这似乎可以进一步简化,我不喜欢在数组中包装'params'如何尝试公共函数验证($form){for($a=0;$a}三维数组缺少foreach循环:-(好吧,你可以有一些变量来计算数组中输入的行数,并执行for循环,直到那一点。我不是PHP方面的专家,但我认为你应该能够做类似的事情。这是因为将有多个'field'和'param',所以它们必须在分开的数组中。
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']);
        }
    }
}