2015-11-21 1 views
0

Je veux construire un tableau avec des paires clé-valeur de requête MySqli. Ce que j'ai tellement loin entrées écrase du tableau:MySQLi obtient des résultats et crée un tableau de valeur clé

$array = array(); 

    while($row = mysqli_fetch_array($result)) 
    { 
     $difference = abs($base - $row["sql_number"]); 
     $array = [$difference => $row["sql_number"]]; 
     $bar = each($array); 
     print_r($bar); 
    } 

    echo count($array); 
    ksort($array); 
    echo count($array); 

    foreach ($array as $key => $value) {    
     echo "Key: ".$key; 
     echo "Value: ". $value; 
    } 

print_r($bar); imprime les paires clé-valeur correcte, mais je suis convaincu qu'il est parce qu'il imprime seulement la dernière entrée de la mysqli_fetch_array($result) et les entrées précédentes sont overwriten. Je veux créer un tel tableau puis le trier avec ksort par la valeur de clé.

+1

vous fait Si tel est votre code réel une faute de frappe ici 'foreach (arrayas' $ qui devrait se lire comme' foreach ($ de as' tableau, les rapports d'erreur aurait jeté une Arrayas variable indéfinie Si vous utilisez 'foreach ($ array as', veuillez corriger votre question.) –

+0

Puisque vous ne voulez pas surcharger la valeur, essayez' $ array [] = [$ difference => $ row ["sql_number"] ] Ceci évitera que la même 'différence' ne soit surchargée, mais notez que dans le' foreach' suivant, 'value' sera un' array' .Pouvez-vous publier la structure désirée du tableau final? – FirstOne

+0

@Fred -ii- fixe.Merci! – Lenny

Répondre

1

Vous aviez raison à propos de vos hypothèses. Puisque vous avez le print_r à l'intérieur de la boucle, même s'il remplace la valeur à chaque fois, vous l'imprimez également à chaque fois.

Cette ligne:

$array = [$difference => $row["sql_number"]]; 

devrait être comme ceci:

$array[$difference] => $row["sql_number"]; 

De cette façon, vous garder une trace des valeurs précédentes (keys) et ajouter de nouvelles.


Cet exemple montre le problème:

$a = array('ok' => 'fine'); 
$b['ok'] = 'fine'; 

print_r($a); // Array ([ok] => fine) 
echo '<br>'; 
print_r($b); // Array ([ok] => fine) 
echo '<br><br>'; 

$a = array('ok2' => 'fine2'); 
$b['ok2'] = 'fine2'; 

print_r($a); // Array ([ok2] => fine2) 
echo '<br>'; 
print_r($b); // Array ([ok] => fine [ok2] => fine2) 
echo '<br><br>'; 

je me sens comme mentionner que vous ne pouvez pas oublier que ce sera override précédente differences. Dans ce cas,, même $row["sql_number"] -s produira les mêmes différences, donc pourrait être pas un problème. Cela vaut toujours la peine d'être mentionné. Exemple de ce problème.

$b['ok'] = 'fine'; 
print_r($b); // Array ([ok] => fine)  

echo '<br><br>'; 

$b['ok'] = 'fine2'; 
print_r($b); // Array ([ok] => fine2)