在循环中将更多列的数组值插入mysql

时间:2015-05-24 19:23:57

标签: mysql arrays simple-html-dom

我使用 SimpleHtmlDom 生成结果。

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表是 记录 ,其中列为&#34; id,date,stock_symbol,buyer,seller,quantity,rate,amount &#34;

"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,但我的数组没有逗号(,)并且没有得到任何结果

编辑:在ans之后编辑

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

1 个答案:

答案 0 :(得分:2)

这会产生多个查询,但这是你可以做到的一种方式。

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

$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