2009-05-11 7 views
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!!! 
+3

Pourquoi tout est si « beau? » – BobbyShaftoe

+0

J'essaie d'écrire du code maintenable. –

+0

il semble que cela pourrait être simplifié encore plus loin, je ne aime pas la façon dont votre emballage 'params' dans un tableau –

Répondre

0

Il semble que vous allez générer des erreurs dans votre deuxième boucle:

foreach ($ValueA as $ValueB) { 

Cela va inclure field dans la boucle et rencontrera des problèmes quand il essaie d'y accéder en tant que tableau.

Aussi, je pense que vous voulez dire pour votre troisième boucle soit:

foreach ($params as $ValueC) { 

Sinon, elle se heurte aux mêmes problèmes que la boucle du milieu. Je pense que si vous avez l'intention de continuer à l'utiliser comme un tableau plutôt que de le refactoriser dans une classe comme d'autres l'ont suggéré, vous devriez le restructurer afin que les données nommées soient toutes au même niveau. Notez que cela réduit la complexité du tableau (un peu) et des boucles (beaucoup).

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

Cette page a quelques exemples d'utilisation des boucles pour accéder aux éléments d'un tableau multidimensionnel: http://www.webcheatsheet.com/PHP/multidimensional_arrays.php

+0

Il manque des boucles foreach pour le tableau en trois dimensions :-( –

+0

Eh bien, vous pourriez avoir une variable qui compte les lignes comme ils sont entrés dans le tableau et faire Je ne suis pas un expert en PHP, mais je pense que vous devriez être capable de faire quelque chose de similaire –

0

Comme « beau » que ces tableaux sont, semble-vous de moi comme quelque chose une classe serait mieux, et Ce serait beaucoup plus facile à traiter.

0

Ce tableau multidimensionnel ne me semble pas beau. Cela ressemble à un gâchis. Cela semble beaucoup plus logique: me

+0

C'est parce qu'il va y avoir plusieurs 'field' et 'param', donc ils doivent être dans des tableaux séparés. –

0

Essayez de déboguer ce qui est $valueX dans votre cas var_dump() par exemple.

peut être foreach($array as $key => $value) est ce que vous cherchez pour

Questions connexes