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