El siguiente código funcionará, pero asume que la longitud de todas las matrices anidadas es la misma, en otras palabras, que cada matriz anidada contiene valores para todos los atributos definidos en la primera matriz anidada.
$array = array(
array('name', 'age', 'gender' ),
array('Ian', 24, 'male'),
array('Janice', 21, 'female')
);
$fields = implode(', ', array_shift($array));
$values = array();
foreach ($array as $rowValues) {
foreach ($rowValues as $key => $rowValue) {
$rowValues[$key] = mysql_real_escape_string($rowValues[$key]);
}
$values[] = "(" . implode(', ', $rowValues) . ")";
}
$query = "INSERT INTO table_name ($fields) VALUES (" . implode (', ', $values) . ")";
Esta solución funcionará con cualquier cantidad de atributos definidos en la primera matriz anidada, siempre que todas las demás matrices anidadas tengan la misma longitud. Para la matriz anterior, la salida será:
INSERT INTO table_name (name, age, gender) VALUES (Ian, 24, male), (Janice, 21, female)
Para ver una demostración, consulte http://codepad.org/7SG7lHaH , pero tenga en cuenta que eliminé la llamada a mysql_real_escape_string() en codepad.org, porque no permiten la función. En tu propio código deberías usarlo.