2010-04-09 4 views
1

У меня есть 2D-массив PHP, много ключей, каждый с одним значением, мне нужно поместить его в базу данных MySQL.

База данных содержит 8 полей. Например. Field1, Field2, Field3 и т. Д.

Я пытаюсь обеспечить value1 => field1, value2 =>field2, value3 => field3 и т. Д., Когда одна запись заполнена (т. Е. После 8 значений) должна быть создана новая запись для следующих 8 значений и так далее.

Я знаю, что 1, 9, 17, 26 и т. Д. Потребуется инструкция insert, а промежуточные значения будут оператором обновления.PHP 2D-массив для базы данных MySQL

Каков наилучший способ сделать это?

ответ

2

array_chunk() - это возможный ответ, если я правильно ответил на этот вопрос.

А потом просто что-то вроде этого

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

Но реальный образец массив может сэкономить кучу времени, как собственные и других людей

Say, если вы хотите, чтобы спасти ключи , а не значения, array_reverse должен быть вызван первым.

1

Проще понять, как использовать счетчик. Нравится:

$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

У меня есть PHP 2D массив, множество ключей, каждый из которых имеет одно значение, мне нужно, чтобы поместить это в базу данных MySQL.

Звучит очень странно - PHP не делает 2-мерных массивов. Только вложенные массивы.

Я знаю, что 1-й, 9-й, 17-й, 26-й величины и т.д., потребуется оператор вставки

Я предполагаю, что означает, что вы не имеете 2D массив - у вас есть 2D-набор данных отображаются в невложенный массив PHP .... в этом случае:

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); 
} 

(где prep_val enloses строка и сбегает мету символов)

C.

0

Я думаю, что вы должны хранить в db id последней вставленной строки и сколько полей в этой строке являются бесплатными.

Это должно позволить вам сделать соответствующее обновление и/или вставки при вводе новых данных в db.

Для разделения решетки на детали вы можете использовать функции array_slice()array_splice() и array_chunk().

Смежные вопросы