Tutorial :How can I make this multidimensional array and these foreach loops work together?



Question:

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


Solution:1

It looks to me like you're going to generate errors in your second loop:

foreach ($ValueA as $ValueB) {  

This is going to include field in the loop and will encounter problems when it tries to access it as an array.

Also, I think you mean for your third loop to be:

foreach ($params as $ValueC) {  

Otherwise, it runs into the same problems as the middle loop.

I think that, if you intend to keep using this as an array rather than refactor it into a class as others have suggested, you should restructure it so that the named data is all at the same level. Notice that this reduces the complexity of both the array (a little) and the loops (a lot).

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']);          }      }  }  


Solution:2

This page has some examples of using for loops to access elements of a multidimensional array: http://www.webcheatsheet.com/PHP/multidimensional_arrays.php


Solution:3

As "beautiful" as those arrays are, sure looks to me like something a class would be better at, and it'd be a lot easier to process.


Solution:4

That multidimensional array doesn't look beautiful to me. It looks like a mess. This seems much more logical:

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


Solution:5

Try to debug what is $valueX in your case with var_dump() for example.

May be foreach($array as $key => $value) is what do you looking for


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »