2010-03-29 8 views
1

J'essaie de traiter ce tableau, d'abord tester la présence d'une vérification, puis extrapoler les données de la quantité pour retourner un prix valide.Comment créer une boucle basée sur ce tableau?

Voici l'entrée pour des quantités fixes d'articles, sans quantité variable.

<input type="checkbox" name="measure[<?=$item->id?>][checked]" value="<?=$item->id?>"> 
<input type="hidden" name="measure[<?=$item->id?>][quantity]" value="1" /> 

Voici les entrées pour les quantités variables d'articles.

<input type="checkbox" name="measure[<?=$item->id?>][checked]" value="<?=$item->id?>"> 
<input class="item_mult" value="0" type="text" name="measure[<?=$item->id?>][quantity]" /> 

Ainsi, le tableau résultant est multidimensionnel. Voici une sortie:

Array ( 
[1] => Array ([quantity] => 1) 
[2] => Array ([quantity] => 1) 
[3] => Array ([quantity] => 1) 
... 
[14] => Array ([checked] => 14 [quantity] => 999) 
) 

Voici la boucle que je utilise pour prendre ce tableau et des éléments de processus cochés la forme en premier lieu. Je suppose que la question se résume essentiellement à comment structurer ma déclaration conditionnelle pour incorporer le tableau multidimensionnel? Ma question: Comment puis-je changer ma boucle pour travailler avec le tableau multidimensionnel?

+0

Est-ce que ça fonctionne comme ça? Ou y a-t-il une sorte de faux résultat? Est-ce que '$ field' est le tableau entier ou une ligne de celui-ci? – PvB

+0

$ field est l'ensemble du tableau – dmanexe

+0

La boucle foreach ne fonctionne pas, elle casse. Je suis à la recherche des bonnes clés et valeurs pour «foreach through», si je dis bien. – dmanexe

Répondre

1

J'ai trouvé au moins 2 erreurs:

  1. mis une déclaration de $newprice en dehors du champ d'application principal si, sinon il n'est pas disponible en dehors de cela, dans le money_format appel
  2. avant de vérifier les valeurs de tableaux, vérifiez si la valeur est définie avec la fonction isset.

Ainsi, le code sera

foreach($field as $value): 
      $newprice = 0; 
      if (isset($value['checked']) && $value['checked'] == TRUE) { 

       $query = $this->db->get_where('items', array('id' => $value['checked']))->row(); 

       #Test to see if quantity input is present 
       if (isset($value['quantity']) && $value['quantity'] == TRUE) { 
        $newprice = $value['quantity'] * $query->price; 

        $totals[] = $newprice; 
       } 

       #Just return the base value if not 
       else { 
        $newprice = $query->price; 

        $totals[] = $newprice; 
       } 

      } 
      else { } ?> 

      <p><?=$query->name?> - <?=money_format('%(#10n', $newprice)?></p> 

     <? endforeach; ?> 
+0

Merci beaucoup! – dmanexe

1

Vous ne devriez pas comparer avec true dans une instruction if. Il suffit d'utiliser l'expression nue et laissez PHP vérifier sa « justesse »:

 if ($value['checked']) { 
      .... 
      if ($value['quantity']) { 
+0

Vous avez certainement raison, mais cela ne rompt pas la boucle car il n'y a pas de comparaison de type. – PvB

Questions connexes