2015-05-24 48 views
0

我有一个使用SimpleHtmlDom生成的结果。在循环中插入数组值更多列到mysql

include('simple_html_dom.php'); 
$html = file_get_html('http://www.example.com'); 

$count =count($html->find('table tbody tr td'))-1; //$count =170 

for ($i=1; $i < $count; $i++) { 
    echo $val[$i] =$html->find('table tbody tr td',$i)->plaintext; 
} 

我不想第一个和最后一个输出,所以使用$x=1 and $count-1

输出的结果是

enter image description here

这里,股票代码是相同的每一行,并有每8个阵列值之后,一个循环。

我的MySQL表为记录与列“id,date,stock_symbol,buyer,seller,quantity,rate,amount

"INSERT INTO records 
(id,date,stock_symbol,buyer,seller,quantity,rate,amount) 
VALUE ('$val1','$val2','$val3','$val4','$val5','$val6','$val7','$val8')", 
('$val9','$val10','$val11','$val12','$val13','$val14','$val15','$val16')" 

我可以手动完成,如果它在数量较少,但它比夫妇数百更多。

我试图

$values = array('English', 'Arabic'); 
$statement = 'INSERT INTO contact (`language1`, `language2`) VALUES ("' . implode('", "', $values) . '")'; 
echo $statement; 

How insert the array value one by one to MySQL table in different column,但我的数组没有逗号(,),并没有得到任何结果

编辑:俺们后编辑

include('inc/simple_html_dom.php'); 
include('mysql.php'); 
// get DOM from URL or file 

header('Content-Type: text/html; charset=utf-8'); 
// get DOM from URL or file 
$html = file_get_html('http://www.seismonepal.gov.np/index.php?action=earthquakes&show=recent'); 

// remove all image 
foreach($html->find('div [class=block2-content] span') as $e) 
$array= str_replace(' ','',$e->plaintext); 

//split all you data into the size chunks you want. 
//$array = array('English', 'French', 'Dutch', 'English', 'French', 'Dutch', 'English', 'French', 'Dutch', 'English', 'French', 'Dutch', 'English', 'French'); 
$chunks = array_chunk($array, 7); 

//get the amount of chunks you have. 
$c = count($chunks); 
$a = 0; 

//then run through each chunk entering it into the database. 

do{ 
    $values = null; 
    $x = 1; 

    foreach($chunks[$a] as $value) { 
     $values .= "?"; 
     if($x < count($chunks[$a])) { 
      $values .= ', '; 
     } 

     $x++; 
    } 

    $sql = "INSERT INTO earthquake(id,date_np,local_time,lattitude,longitude,magnitude,epic_center,remarks) VALUES ({$values})";  
    $query = $db->prepare($sql); 

    if(count($chunks[$a])){ 
     $y = 1; 
     foreach($chunks[$a] as $param) { 
      $query->bindValue($y, $param); 
      $y++; 
     }  
    } 


    if($query->execute()){ 
     echo "Done {$a}" . "<br/>"; 
    }else{ 
     echo "Not Done {$a}" . "<br/>"; 
    } 
    $a++; 

}while($a < $c); 

回答

2

这将使多个querys,但这是一种方式,你可以做到这一点。

将所有数据拆分成您想要的大小块。

$array = array('English', 'French', 'Dutch', 'English', 'French', 'Dutch', 'English', 'French', 'Dutch', 'English', 'French', 'Dutch', 'English', 'French'); 
$chunks = array_chunk($array, 2); 

获得您拥有的块的数量。

$c = count($chunks); 
$a = 0; 

然后运行通过每个块进入数据库。

do{ 
    $values = null; 
    $x = 1; 

    foreach($chunks[$a] as $value) { 
     $values .= "?"; 
     if($x < count($chunks[$a])) { 
      $values .= ', '; 
     } 

     $x++; 
    } 

    $sql = "INSERT INTO `table` (`language1`, `language2`) VALUES ({$values})";  
    $query = $db->prepare($sql); 

    if(count($chunks[$a])){ 
     $y = 1; 
     foreach($chunks[$a] as $param) { 
      $query->bindValue($y, $param); 
      $y++; 
     }  
    } 


    if($query->execute()){ 
     echo "Done {$a}" . "<br/>"; 
    }else{ 
     echo "Not Done {$a}" . "<br/>"; 
    } 
    $a++; 

}while($a < $c); 

希望这会有所帮助。

编辑对于后续问题。

你可以把它们放到一个数组中,就像你发现它们一样。

$array = array(); 

foreach($html->find('div [class=block2-content] span') as $e){ 
    array_push($array, $e->plaintext); 
} 

然后你可以使用array_chunk

+0

你好仿拟,感谢ans,我编辑了问题,并包含代码,但仍然给出错误,array_chunk()期望参数1是数组, –

+1

@AarveeThapa我编辑了我的帖子以包含答案你的后续问题。 – Parody

+0

再次感谢您的帮助..但我是新来的“准备”功能,通过互联网搜索并尝试新的连接字符串到MySQL和数据库,仍然失败。我得到这样的错误,“调用一个非对象的成员函数prepare()”。你能否在这里提供一点帮助?提前致谢。 –