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

$ sql = "INSENT INTO data (id, num, name) VALUES ('53','20','aaa'),('10','20','bbb')";php array to SQL

Как преобразовать $ array в ('53','20','aaa'),('10','20','bbb')?

Благодаря

ответ

3

implode() может помочь вам сделать это, хотя вам нужно перебрать и применить его к каждому отдельному массиву:

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

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

`Implode ($ массив, " ''")` -> `лопаются ($ подмассив, " ''")` спасибо – love 2010-11-29 03:19:12

+0

Да, извините, пропустил это один, прежде чем я писал. Просто обновил свой ответ. – 2010-11-29 03:22:56

1

Я бы сделать это, используя подготовленное заявление и простой петля, например

$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

цикл через них с помощью Еогеасп:

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

вуаля