2010-11-19 27 views
1

Je possède ce code qui génère un tableau HTML avec php:PHP - Les variables dynamiques ou tableau pour l'intérieur variable()

<?php 
include("numbers2.php"); 

echo '<table border="1">'; 
echo '<tr>'; 

for ($i = 1; $i <= 9; $i++) { 
if($a1_pos_txt !== TRUE) { 

echo "<td>" . $numbers["a" . $i . "_pos"] . "</td>"; 

} else {?> 
<?php 
echo '<td><input type="text" name="a' . $i . '_post" size="1" maxlength="1" /></td>'; 
?> 
<?php } }?> 

Ce que je dois faire est de modifier la variable $a1_post_txt de telle sorte que lorsque le Foor Je boucles au lieu de se $a1_pos_txt chaque fois:

$a1_pos_txt 
. 
. 
$a9_pos_txt 

Je l'ai essentiellement ce que je faisais avec $numbers["a" . $i . "_pos"] et name="a' . $i . '_post" mais maintenant que la variable se trouve dans une autre variable, je ne pas savoir comment faire cela.

J'espère que c'est assez clair, si non, s'il vous plaît demander des éclaircissements nécessaires.

Merci d'avance !!

+4

Vous devez utiliser un tableau à la place – KingCrunch

Répondre

2

au lieu d'un tableau d'utilisation variable. Dans votre tableau contiendra des valeurs comme vrai ou flase, qui étaient auparavant dans a1_pos_txt de $ ...... $ a9_pos_txt

$arrOfValues[1] = TRUE; 
$arrOfValues[2] = FALSE; 
...... 
..... 
... 
$arrOfValues[9] = TRUE; 

donc le code ressemblera à ceci

<?php 
include("numbers2.php"); 

echo '<table border="1">'; 
    echo '<tr>'; 

for ($i = 1; $i <= 9; $i++) { 
if($arrOfValues[$i] !== TRUE) { 

echo "<td>" . $numbers["a" . $i . "_pos"] . "</td>"; 

} else {?> 
<?php 
echo '<td><input type="text" name="a' . $i . '_post" size="1" maxlength="1" /></td>'; 
?> 

+0

Bien que je ne peux pas l'appliquer comme ça (à cause du code précédent) cela m'a donné une bonne idée (avec juste une légère modification merci) – Trufa

+0

Merci !! J'ai fait quelque chose de très similaire mais en conept c'est exactement ce que j'ai fait! – Trufa

+0

J'espère que ma réponse vous aidera à résoudre votre problème –

0

http://php.net/manual/en/function.eval.php

La fonction eval fera ce que vous voulez.

+0

Damn le php est en panne (pour moi au moins) je lui donne un coup d'oeil dès qu'il est agin! Merci!! – Trufa

+0

@Trufa - confirmé php.net est en panne. Mais les miroirs comme uk.php.net sont en hausse, alors essayez l'un d'eux à la place. – Spudley

+0

Le site est en hausse, ça a l'air bien !! merci, je vais essayer. – Trufa

0

Je suppose que vous devriez remplacer votre variable unique par un tableau. Je veux dire, au lieu de créer

$ a1_pos_txt ... $ a9_pos_txt

vous devriez avoir un tableau où vous pouvez utiliser quelque chose comme:

si (myVar $ [$ i] = = true) {...}

Où et comment initialisez-vous vos variables de drapeau?

Charlie

+0

ou comme Lan dit utiliser la fonction eval :) – Chemed

1

Vous pouvez utiliser des variables dynamiques:

<?php 
    $test = 'a'; 
    echo ${'test'}; 
?> 

Cette affiche "un".

Vous pouvez donc créer un nom de variable sous forme de chaîne et obtenir sa valeur!

+0

Oui, je sais que je pourrais mais je ne peux pas comprendre comment faire cela pour "une partie d'une variable" $ a1_post_txt (ne change que le "1") – Trufa

+0

J'ai mis à jour, Je pense que tu vas mieux comprendre. – MatTheCat

1

Quelqu'un variable variable suggérée - ils sont horribles! Ne les utilisez pas! (Ils peuvent rendre votre code très difficile à lire et à maintenir, et ont le potentiel d'introduire des problèmes de sécurité).

Quelqu'un d'autre a suggéré d'utiliser eval() - ne l'utilisez certainement pas !!(En utilisant eval est considérée comme très mauvaise pratique dans pratiquement toutes les situations possibles, il est très probable d'introduire les questions de sécurité)

Plusieurs personnes ont suggéré d'utiliser un tableau au lieu de variables nommées - c'est la bonne solution.

Vous l'avez déjà fait avec $numbers, alors pourriez-vous faire quelque chose de similaire avec les variables post?

Si elles sont liées au code HTML que vous avez name="a' . $i . '_post" alors vous pouvez changer ce code pour afficher des variables au lieu - quelque chose comme ceci:

name="a_post['.$i.']" 

Ensuite, au lieu d'avoir des variables post nommé a1_post et a2_post, etc, vous aurez ceux qui sont nommés a_post[1] et a_post[2] etc Il devient alors très facile de les parcourir parce qu'ils sont un tableau.