2016-05-01 12 views
2

Ich versuche, Benutzerdaten aus einer SQL-Tabelle abzurufen, in der eine der Spalten blob_medium ist. Ich führe die SQL-Abfrage richtig aus und erhalte die Daten im PHP-Skript.Codierung eines einzelnen Schlüssels in einem assoziativen Array zu Base64

if(mysqli_num_rows($result)){ 
    while($row=mysqli_fetch_assoc($result)){ 
     $result_array['user_data'][]=$row; 
    } 
} 

, nun diese Daten json_encode, ich brauche die Daten von User_pic Spalte zur Basis zu codieren, 64., dass ich das versuche. Aber es scheint, dass ich etwas falsch mache. Jede Art von Hilfe wäre willkommen.

foreach($result_array as $key){ 
     foreach($key as $key2){ 
      //print_r(base64_encode($key2['user_pic']).'<br/>'.'<br/>'); 
      $key2['user_pic'] = base64_encode($key['user_pic']); 
      //print_r(($key['user_pic']).'<br/>'.'<br/>'); 
     } 
} 

Als ich die print_r Aussagen meine Daten im Base64-Format gedruckt wird, Kommentar-, aber die Daten des Assoc-Array ändert sich nicht.

Antwort

0

Das ist, weil du bist Ändern des $key2 Arrays. Ein temporärer Wert, der von Ihrer foreach-Schleife erstellt wurde. Ich selbst würde empfehlen eine for Schleife in dieser speziellen Situation verwendet wird, weil mir gesagt wurde, nie eine Schleife innerhalb einer Schleife verwenden, wenn ich es verhindern kann, und es macht die Dinge viel einfacher zu lesen:

for($i=0; $i < count($result_array['user_data']); $i++){ 
$encodedUserPic = base64_encode($result_array['user_data'][$i]['user_pic']); 
$result_array['user_data'][$i]['user_pic'] = $encodedUserPic; 
} 
+1

Ich würde immer noch eine Foreach verwenden, aber auf die äußere Schleife verzichten. – Ray

+0

Das hat funktioniert, Danke Mann (Y). –

1

Das liegt daran, dass die $key und $keys des Arrays in der for-Schleife Kopien sind. Wenn Sie sich um das Original ändern mögen, können Sie entweder tun es durch die Angabe sie Referenzen, keine Kopien zu sein:

foreach($result_array['user_data'] as &$key){ 
     $key['user_pic'] = base64_encode($key['user_pic']); 
    } 

oder durch expliziten Index in das Original:

foreach($result_array['user_data'] as $index => $key){ 
     $result_array['user_data'][$index] ['user_pic'] = base64_encode($key['user_pic']); 
} 
+0

ich persönlich das Gefühl, Es gibt keine Notwendigkeit für eine Schleife innerhalb einer Schleife. Es wäre viel einfacher, eine einzige "for" -Schleife für diese spezielle Situation zu erstellen. Requisiten für das Tippen schneller als ich, obwohl;) – NoobishPro

+0

@Babydead guter Punkt, bemerkte nur die explizite Verwendung von nur dem 'user_data'-Index in der ursprünglichen Ergebnis-Array – Ray

+0

Und ich habe komplett vermisst, dass Sie die Foreach intakt halten können, indem Sie es tun (aktualisiert). Das macht meine Antwort überflüssig, aber ich werde es für jeden Fall verlassen. Ich werde deine für das Überlisten und Überholen aufwerten: ') – NoobishPro

Verwandte Themen