2010-04-09 5 views
1

J'ai un tableau PHP 2D, de nombreuses clés, chacune avec une valeur, j'ai besoin de mettre cela dans une base de données MySQL.

La base de données comporte 8 champs. Par exemple. Champ1, Champ2, Champ3, etc.

J'essaye de m'assurer value1 => field1, value2 =>field2, value3 => field3 et ainsi de suite, quand un enregistrement est plein (c'est-à-dire après 8 valeurs) un nouvel enregistrement devrait être créé pour les 8 prochaines valeurs et ainsi de suite.

Je suis conscient que les 1ère, 9ème, 17ème, 26ème valeurs etc, auront besoin d'une instruction d'insertion et les valeurs intermédiaires seront une instruction de mise à jour.PHP 2D Array to MySQL Database

Quelle est la meilleure façon de procéder?

Répondre

2

array_chunk() est la réponse possible si j'ai pris cette question correcte.

Et puis juste quelque chose comme ça

foreach ($chunks as $row) { 
    array_map $row with mysql_real_escape_string 
    implode to get VALUES clause 
    INSERT 
} 

Mais l'échantillon réel du tableaupeut économiser une tonne de vos deux propres et d'autres temps

des gens

Dites, si vous voulez avoir enregistré les clés , not values, array_reverse doit être appelé en premier.

1

Le plus simple à comprendre serait d'utiliser un compteur. Comme:

$cc=0; 
while(...){ // Whatever your finished condition is 
if($cc==0){ 
    //INSERT 
}else{ 
    //UPDATE 
} 
$cc++; 
if($cc==8) $cc=0; 
} 
1
$records = array_chunk($yourArray); 

foreach($records as $record) 
{ 
    $record = array_map("mysql_real_escape_string", $record); 
    $q = 'INSERT INTO `yourTable` VALUES 
     '.$record[0].', 
     '.$record[1].', 
     '.$record[2].', 
     '.$record[3].', 
     '.$record[4].', 
     '.$record[5].', 
     '.$record[6].', 
     '.$record[7].', 
    '; 
    $res = mysql_query($q); 
} 
0

J'ai un tableau 2D PHP, plusieurs clés, chacune avec une valeur, je dois mettre cela en une base de données MySQL.

Semble très étrange - PHP ne fait pas de tableaux bidimensionnels. Uniquement les tableaux imbriqués.

Je suis conscient que les 1er, 9, 17, valeurs 26ème etc, auront besoin d'une instruction d'insertion

Je présume que cela signifie que vous ne disposez pas d'un tableau 2D - vous avez un ensemble de données 2D mappés à un réseau de PHP non imbriquée .... auquel cas:

for ($x=0; $x<count($data)/8; $x+=8) { 
    $qry="INSERT INTO sometable (f1, f2, f3,f4,f5,f6,f7,f8) VALUES ("; 
    $join=''; 
    for ($y=0; $y<8; $y++) { 
     $qry.=$join . prep_val($data[$x+$y]); 
     $join=','; 
    } 
    mysql_query($qry); 
} 

(où les chaînes de prep_val enloses et échappe caractères meta)

C.

0

Je pense que vous devriez garder dans le db id de la dernière rangée insérée, et combien de champs dans cette rangée sont libres.

Ceci devrait vous permettre d'effectuer les mises à jour et/ou les insertions appropriées lors de la mise en db de nouvelles données.

Pour diviser une matrice en parties, vous pouvez utiliser les fonctions array_slice() et array_chunk().