2010-04-24 7 views
2

Merci pour l'aide ci-dessous, cependant, je suis encore avoir quelques problèmes, je vais essayer d'expliquer plus:variable PHP variable à l'intérieur [] 's

J'ai une variable comme suit:

$value['questions']; 

maintenant, je dois faire une vérification dans une boucle, donc je ce morceau de code dans la boucle:

if($results[$value['questions']]==4){blah blah blah}; 

mais le problème que j'ai est que la valeur de $value['questions'] est q1 mais j'ai besoin le q1 est une chaîne (i.e. inside quotes '') dans la section des résultats de $ du code, de sorte que l'élément de résultats $ devrait ressembler à ceci ...

if($results['q1']==4){blah blah blah}; 

actuellement, il ressemble à ceci

if($results[q1]==4){blah blah blah}; 

sens?

Merci encore pour l'aide.

Salut à tous,

J'espère qu'il ya une solution simple!

J'ai une variable:

$results['q1']; 

Est-il possible d'avoir l'élément 'q1' comme une variable, quelque chose comme ceci:

$results['$i[question]']; 

ont pas été en mesure de trouver une solution sur Google et la recherche des manuels PHP ...

Quelqu'un at-il une suggestion/solution?

Merci,

Homer.

Répondre

6

Oui, il est possible d'utiliser une variable comme indice, lors de l'accès d'un élément de tableau.

À titre d'exemple, considérons cette partie du code:

$results = array(
    'a' => 'sentence a', 
    'b' => 'hello !', 
); 

$indice = 'a'; 
echo $results[$indice]; 

Ce qui vous donnera la sortie suivante:

sentence a 


Ici, $indice est une variable assez simple, mais vous pourriez avoir utilisé tout ce que vous vouliez entre le [ et ], comme, par exemple:

  • fonctions: $results[ my_function($parameter) ]
  • élément de tableau: $result[ $my_array['indice'] ]
    • Ce qui semble être ce que vous voulez faire?
  • propriété d'objet: $result[ $obj->data ]
  • ...

Fondamentalement, vous pouvez utiliser à peu près tout ce que vous voulez là - tant qu'il évalue à une valeur scalaire (à savoirun seul entier, chaîne)


Dans votre cas, vous pourriez avoir $results déclaré un peu comme ceci:

$results = array(
    'q1' => 'first question', 
    'q2' => 'second question', 
); 

Et $i serait déclarée ainsi:

$i = array(
    'question' => 'q1' 
); 

Ce qui signifie que $i['question'] serait 'q1', et que la partie de code suivante:

echo $results[ $i['question'] ]; 

obtiendriez-vous cette sortie:

first question 



Edit: Pour répondre aux mots que vous avez utilisé dans le titre de votre question, vous pouvez aussi utiliser ce qui est appelé variable variable en PHP:

$variable = 'a'; 
$indice = 'variable'; 
echo $results[ $$indice ]; 

ici:

  • $indice est 'variable'
  • et $$indice est 'a'
  • ce qui signifie que vous obtiendrez le même résultat qu'avant


Et, bien sûr, n'oubliez pas de lire la section Arrays du manuel PHP.

Le Why is $foo[bar] wrong? paragraphe pourrait être intéressant, en particulier, compte tenu de l'exemple que vous FIRT posté.



Modifier après l'édition de l'OP:

Si $value['questions'] est 'q1', puis, les deux parties de code suivantes:

if($results[$value['questions']]==4){blah blah blah} 

et

if($results['q1']==4){blah blah blah} 

devrait faire exactement la même chose: avec $results[$value['questions']], la partie $value['questions'] sera évaluée (à 'q1') avant que le reste de l'expression, et que l'on sera le même que $results['q1'].


A titre d'exemple, la portion de code suivante:

$results = array(
    'q1' => 4, 
    'q2' => 6, 
); 
$value = array('questions' => 'q1'); 

if($results[$value['questions']]==4) { 
    echo "4"; 
} 

sorties 4.

+0

@Pascal - merci pour les heads up - ne sais pas si vous pouvez alors répondre à la question ci-dessus ? –

+0

@Homer: J'ai édité ma réponse avec un exemple qui est plus proche de votre situation spécifique, espérons que cela aide :-) –

+0

@Pascal - presque répondu mais pas tout à fait - la valeur de $ value ['questions' est q1 NOT ' q1 'mais la section $ results du code affiche actuellement les résultats [q1] et NOT $ results [' q1 '] et ne fonctionnera donc pas. Toute aide supplémentaire. Merci d'avance. –

4

Vous pouvez faire:

$results[$i['question']]; 

Ce sera d'abord accéder au tableau $i pour obtenir la valeur correspondant à la clé 'question'. Cette valeur sera utilisée comme clé dans le tableau $results.

Votre: $results['$i[question]']; est en train d'essayer d'obtenir la valeur correspondant à la '$i[question]' clé du tableau $results. Comme la clé est en guillemets simples, l'interpolation de variable pas se produire et la chaîne entière est traitée littéralement.

Sinon, vous pouvez également faire:

$results["$i[question]"]; // using double quotes also works. 

Exemple:

$arr1 = array('php' => 'zend', 'java' => 'oracle'); 
$arr2 = array('p' => 'php', 'j' => 'java'); 

echo $arr1[$arr2['p']]; // prints zend. 
echo $arr1["$arr2[p]"]; // prints zend. 
+0

@Uni - merci - Je suis en train de ramener la valeur correspondant à la clé, comme vous l'avez dans votre premier paragraphe - I besoin d'utiliser cela comme une chaîne si - voir la question mise à jour. –

+0

@Hormer: Il sera traité comme la chaîne par défaut. Vous devez faire quelque chose de plus. – codaddict

0
<?php 

$result['q1']; 

// is equivalent to 

$index = 'q1'; 
$result[ $index ]; 

Maintenant $index peut être aussi complexe que vous voulez qu'il soit. Par exemple quelque chose comme ceci est également possible:

$result[ 'q' . round($someArray[$i]/2) ]; 
+0

OFC que cet index (quelque chose comme (q1 ou q0) doit exister ... –

+0

Mais cela s'applique à chaque accès au tableau .. – poke

0

CODE

<?php 

$results = array(
    'q1' => 'This is a result called q1.', 
    'q2' => 'So, can you access this?', 
    '$i[question]' => 'This is a result called $i[question]', 
); 

$i = array(
    'question' => 'q2', 
    'answer' => 'Yes.' 
); 

echo '<pre>'; 
echo $results['q1'] . "\n";    // Using Array's is easy - 
echo $results['$i[question]'] . "\n"; // all you gotta do is make sure 
echo $results[$i['question']] . "\n"; // that you understand how 
echo $i['answer'];      // the keys work. 

?> 

SORTIE

This is a result called q1. 
This is a result called $i[question] 
So, can you access this? 
Yes. 
+0

Merci Allyn, j'arrive mais lentement, j'ai mis à jour mes questions, d'autres suggestions? –