2011-07-23 62 views
0

我会问,因为this答案。有没有更优雅的方法来查询数据?

我的代码看起来像

<?php 
$lines = file('file.txt'); 
$count = count($lines); 
$i = 0; 
$query = "INSERT INTO table VALUES "; 
foreach($lines as $line){ 
    $i++; 
    if ($count == $i) { 
     $query .= "('".$line."')"; 
    } 
    else{ 
     $query .= "('".$line."'),"; 
    } 
} 
echo $query; 

有更优雅的方式来做到这一点/函数在PHP?

回答

4
foreach ($lines AS $line) 
{ 
    $query[] = "($line)"; 
} 

echo "INSERT INTO table VALUES " . implode(",",$query); 

是如何与implode做到这一点,但我认为AlienWebguy的更好

+0

的同义词,这就是我正在寻找的东西。 – genesis

+0

+1,这比将字符串串起然后修剪它要干净得多。但是,它仍然可以改进。 'file()'已经返回一个数组,所以你可以'echo'INSERT INTO TABLE VALUES('。join(')(',file('file.txt'))。');''(假设你知道文件中至少有一行)。 –

+0

+1我认为你的更好;) – AlienWebguy

3
$query = 'INSERT INTO table VALUES '; 
$query .= "('" . implode("'), ('", $lines) . "')"; 

UPD

对于2场它可能看起来像(我想你使用PHP5 +):

$query = 'INSERT INTO table VALUES '; 

$lines = array(array(1,2), array(3,4)); 
$query .= "('" . implode("'), ('", array_map(function($i) { return "'" . implode("', '", $i) . "'"; }, $lines)) . "')"; 

var_dump($query); 
+0

我认为这正是我正在寻找的:p – genesis

+0

如何在更多数据的情况下使用它?例如2个DB字段? – genesis

+0

zerkms这是一些漂亮性感的代码人。 +1。 – AlienWebguy

3
foreach(file('file.txt') as $line){ 
    $query .= "('".$line."'),"; 
} 
echo "INSERT INTO table VALUES " . rtrim($query,','); 
+0

好吧,我也使用过这个,我忘了它,但:)谢谢你提醒它! +1 – genesis

+0

我更喜欢这个,因为它更具可读性,当你在6个月的时间内再次观看时,将更容易计算出正在发生的事情。聪明的代码是好的,可读的代码更好,更聪明,可读的代码是最好的:)。我有足够的非明显的代码,特别是我自己的!无论如何,+1 – vascowhite

+0

我不同意,内爆的方法是更清晰的阅读,更优雅,更高效。 –

相关问题