2010-11-29 4 views
3
$array = array 
     (
      53 => array('num' => 20,'name' => 'aaa'), 
      10 => array('num' => 20,'name' => 'bbb') 
     ); 

$ sql = "INSENT INTO données (id, num, nom) VALEURS ('53','20','aaa'),('10','20','bbb')"; Comment convertir $ array pour ('53','20','aaa'),('10','20','bbb')?tableau php à SQL

Merci

Répondre

3

implode() peuvent vous aider à cela, mais vous aurez besoin de boucle à travers et l'appliquer à chaque tableau individuel:

$resultStrings = array(); 
foreach ($array as $key => $values) { 
    $subarrayString = "('$key','" . implode($values, "','") . "')"; 
    $resultStrings[] = $subarrayString; 
} 

$result = implode($resultStrings, ","); 
+1

'implode ($ array, " ''")' -> 'imploser (sous-tableau de $, " ''")' merci – love

+0

Eh oui, désolé, a raté que l'un avant posté. Juste mis à jour ma réponse. –

+1

J'aime la deuxième implosion là! Attention cependant, l'affiche voulait aussi la clé du tableau. Vous auriez besoin de boucler $ array en $ key => $ subarray et de concaténer la clé avant le sous-array implodé – munchybunch

1

Je ferais cela en utilisant une déclaration préparée et simple boucle, par exemple

$db = new PDO(...); 
$stmt = $db->prepare('INSERT INTO data(id, num, name) VALUES (?, ?, ?)'); 
$stmt->bindParam(1, $id); 
$stmt->bindParam(2, $num); 
$stmt->bindParam(3, $name); 

foreach ($array as $id => $vals) { 
    $num = $vals['num']; 
    $name = $vals['name']; 
    $stmt->execute(); 
} 
+0

Ne va-t-il pas s'exécuter une fois par tableau? J'éviterais plus de roundtrips à la base de données que strictement nécessaire. –

+2

Cela va frapper la BD une fois par élément de tableau externe, cependant l'instruction est * préparée * et donc les valeurs/arguments de liaison sont communiqués dans un trafic réduit et la base de données a déjà analysé l'instruction SQL. Il pourrait descendre à 6 | demi-douzaine/un-ou-l'autre scénario, mais cette méthode est bien connue et compatible avec les plates-formes DB par rapport aux valeurs composées pour une instruction d'insertion MySQL. – Xailor

+0

@Justin pour ne pas mentionner les avantages de l'utilisation de la liaison de paramètres. – Phil

0
boucle

à travers eux en utilisant foreach:

$result = ''; 
foreach ($array as $key=>$subarray) { 
    $result .= "('$key'"; 
    foreach ($subarray as $el) { 
     $result .= ",'$el'"; 
    } 
    $result .= "),"; 
} 
//get rid of the trailing comma 
$result = substr($result,0,-1); 

et voilá

Questions connexes