PHP 2D Array для базы данных MySQL - PullRequest
1 голос
/ 09 апреля 2010

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

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

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

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

Как лучше всего это сделать?

Ответы [ 5 ]

2 голосов
/ 09 апреля 2010

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

А потом просто как то так

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

Но образец массива real может сэкономить массу вашего и чужого времени

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

1 голос
/ 09 апреля 2010
$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);
}
1 голос
/ 09 апреля 2010

Самым простым для понимания будет использование счетчика. Как:

$cc=0;
while(...){ // Whatever your finished condition is
 if($cc==0){
  //INSERT
 }else{
  //UPDATE
 }
 $cc++;
 if($cc==8) $cc=0;
}
0 голосов
/ 09 апреля 2010

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

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

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

0 голосов
/ 09 апреля 2010

У меня есть двухмерный массив PHP, много ключей, каждый с одним значением, мне нужно поместить это в базу данных 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 включает строки и экранирует мета-символы)

С

...