2017-08-23 4 views
0

J'ai un tableau de noms que je voudrais convertir en variables. Ce sont des noms de tests générés à partir d'une base de données (donc si un nouveau test est ajouté, un nouvel index sera ajouté au tableau), nos tests sont mis à jour régulièrement donc je ne veux pas coder en dur mes variables, vouloir les générer dynamiquement.créer des variables PHP dynamiques à partir d'une base de données

J'ai essayé ce code:

$data = array(); 
foreach($tests as $v) { 
    $$v = ${}; 
    array_push($data, $v); 
} 

Mon but est de créer les variables dynamiquement puis les ajouter à chaque instance d'un test étant prise, par exemple, si 6 personnes ont eu l'un des nos tests instantanés, la variable 'instant' aura la valeur 6. Suis-je sur la bonne voie? Merci!

***** ***** MISE A JOUR Im essayant de remplir un tableau morris.js en utilisant ces variables, tout fonctionne quand codé en dur comme ceci:

$pos = 0; 
$neg = 0; 
$pen = 0; 
$cont = 0; 
$misc = 0; 
foreach ($data as $item) { 
    if ($item['result'] === 'Positive') { 
    $pos++; 
    } elseif ($item['result'] === 'Negative') { 
    $neg++; 
    } elseif ($item['result'] === 'Pending') { 
    $pen++; 
    } elseif ($item['result'] === 'Contact the Clinic') { 
    $cont++; 
    } else { 
    $misc++; 
    } 
} 

$res = array("Positive"=>$pos, "Negative"=>$neg, "Pending"=>$pen, "Contact the Clinic"=>$cont, "Misc"=>$misc); 
$data = json_encode($res); 

Cela me donne: enter image description here Mais il est important de le remplir dynamiquement à partir de nos bases de données de sorte que si un nouveau jeu de test/résultat est ajouté, je n'ai pas besoin d'entrer et de mettre à jour manuellement le code, ce qui me donne des données sûr de créer dynamiquement des variables basées sur les données: /* Créer d les variables ynamic: */

$vars = array(); 
foreach($tests as $k => $v) { 
    array_push($vars, $v); 
    $$v = extract($vars); 
/* Loop through each instance and create a count for all matching instances */ 
    foreach($data as $item){ 
    if($item['name'] === $k){ 
    ${$v}++; 
     } 
    } 
} 

me donne les étiquettes, mais sans valeur:

{"Positive","Negative","Pending","Contact the Clinic","Misc"} 

Im utilise actuellement les acclamations CodeIgniter (dernière libération)

+0

Est-ce votre code actuel ou est-ce un pseudo-code? – Script47

+0

C'est le code que j'ai essayé, C'est tout ce que j'ai trouvé pour la plupart des fois les variables sont codées manuellement – Sam

+1

Avez-vous vraiment besoin de variables séparées pour ceux-ci. Ne pourriez-vous pas simplement utiliser un tableau associatif ('$ data [$ v] = x;')? –

Répondre

0

Eh bien, si vous utilisez mysqli, vous pourrait le faire comme ceci:

// your query stuff: 
$stmt->query($query); 
$data = $stmt->fetch_assoc(); 

// just for example data contains: 
// array('id'=>1,'name'=>'Andy') 

foreach($data as $field => $value) { 
    ${$field} = $value; 
} 

// then output: 
echo $name; // should output 'Andy';