Php 如何在处理另一个数组的foreach循环内部调用外部数组

Php 如何在处理另一个数组的foreach循环内部调用外部数组,php,arrays,foreach,Php,Arrays,Foreach,我有一个包含数据(站和时间)的外部数组。 我想比较数据是否已经存在于我的数据库中,如果它不存在,请插入特定的站点,或者如果时间不等于数据库中的时间,请更新它。我只是不知道如何调用foreach循环中的外部数据,在这里我循环数据库数据,所以我将把insert和update部分暂时放在一边 这是我的代码: <?php // all database parameters require_once("config.php"); // main array usually contains up

我有一个包含数据(站和时间)的外部数组。 我想比较数据是否已经存在于我的数据库中,如果它不存在,请插入特定的站点,或者如果时间不等于数据库中的时间,请更新它。我只是不知道如何调用foreach循环中的外部数据,在这里我循环数据库数据,所以我将把insert和update部分暂时放在一边

这是我的代码:

<?php
// all database parameters
require_once("config.php");

// main array usually contains up to around 40 arrays
$data_array = array(
                array("time"=>"2016-07-01 19:00:00", "name_station"=>"RC Bilogora", "type_station"=>"1", "longitude"=>"17.162", "latitude"=>"45.882", "temperature"=>"28.8"),
                array("time"=>"2016-07-01 19:00:00", "name_station"=>"Bjelovar", "type_station"=>"1", "longitude"=>"16.869", "latitude"=>"45.910", "temperature"=>"28.6"),
                array("time"=>"2016-07-01 19:00:00", "name_station"=>"Crikvenica", "type_station"=>"1",  "longitude"=>"14.689", "latitude"=>"45.173", "temperature"=>"28.0")
                );

// print $data_array
echo "Data from external array";
echo "<pre>";
print_r($data_array);
echo "</pre>";
echo "<hr>";

try {
        // connect to the database
        $dbh = new PDO('pgsql:host='.DB_HOST. ';port=' .DB_PORT. ';dbname=' .DB_NAME, DB_USER, DB_PASS);

        // start transaction
        $dbh->beginTransaction();

        // query
        $sql_select = "SELECT station, time FROM vwstationmeasurmentdva";
        $stmt_select = $dbh->prepare($sql_select);
        $stmt_select->execute();
        $result_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);

        // print results from sql for view stationmeasurment
        echo "Station and time from database captured with FETCH ASSOC";
        echo "<pre>";
        print_r($result_select);
        echo "</pre>";
        echo "<hr>";

        $number_of_rows = count($result_select);

        // FOREACH loop
        $result_vwstationmeasurment_select_array = array ();
        foreach($result_select as $row) {
            $station_name_db = $row['station'];
            $time_db = $row['time'];
            echo $station_name_db . "<br>";
            echo $time_name_db . "<br>";

            // PROBLEM: I DONT KNOW HOW TO CALL $station_name AND $time BEFORE THIS IF STATEMENT SO I CAN DO THE IF STATEMENT
            if ($station_name_db != $station_name OR empty($station_name_db)){
               echo "This station is not in a database or there are no data for stations in a database at all so insert that station";
            } elseif ($time_db != $time){
               echo "Time from external data is not equal to the time in a database so update time in a database";
            }

            $result_vwstationmeasurment_select_array[] =($row);
    };


        // save transaction
        $dbh->commit();

        // close database connection
        $dbh = null;

} catch (PDOException $e) {
        // cancel the transaciton if something went wrong and write msg about it
        $dbh->rollBack();
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
}
?>
打印$result\u选择:

使用FETCH ASSOC从数据库捕获的站点和时间

try {
        // connect to the database
        $dbh = new PDO('pgsql:host='.DB_HOST. ';port=' .DB_PORT. ';dbname=' .DB_NAME, DB_USER, DB_PASS);

        // start transaction
        $dbh->beginTransaction();

        // EDITED
        foreach($data_array as $row){
                $station_external = $row['name_station'];
                $time_external = $row['time'];
                echo $station_external . "<br>";
                echo $time_external . "<br>";


                // query
                $sql_select = "SELECT station, time FROM vwstationmeasurmentdva";
                $stmt_select = $dbh->prepare($sql_select);
                $stmt_select->execute();
                $result_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);

                // print results from sql for view stationmeasurment
                echo "Station and time from database captured with FETCH ASSOC";
                //echo "<h2>Ovo su stanica i vrijeme dohvaceni iz baze podataka samo uz pomoc print_r nakon FETCH ASSOC</h2>";
                echo "<pre>";
                print_r($result_select);
                echo "</pre>";
        } // THE END OF EDIT

                // save transaction
                $dbh->commit();

                // close database connection
                $dbh = null;

} catch (PDOException $e) {
                // cancel the transaciton if something went wrong and write msg about it
                $dbh->rollBack();
                print "Error!: " . $e->getMessage() . "<br/>";
                die();
}
FOREACH循环:

RC Bilogora
2016-07-01 19:00:00
Station and time from database captured with FETCH ASSOC
Array
(
    [0] => Array
        (
            [station] => RC Bilogora
            [time] => 2016-07-01 16:00:00
        )

    [1] => Array
        (
            [station] => Bjelovar
            [time] => 2016-07-01 16:00:00
        )
...
Bjelovar
2016-07-01 19:00:00
Station and time from database captured with FETCH ASSOC
Array
(
    [0] => Array
        (
            [station] => RC Bilogora
            [time] => 2016-07-01 16:00:00
        )

    [1] => Array
        (
            [station] => Bjelovar
            [time] => 2016-07-01 16:00:00
        )
...
编辑(@PaulH) 我的方法根本不起作用…你能通过代码给我一些建议吗

    foreach($data_array as $row){
            // station name from array
            $station_name = $row['name_station'];

            // query
            $sql_select = "SELECT station FROM vwstationmeasurmentdva WHERE station='$station_name'";
            $stmt_select = $dbh->prepare($sql_select);
            $stmt_select->execute();
            $result_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);

            $number_of_rows = count($result_select);
            if ($number_of_rows < 1){
                    echo " <br> Station doesn't exist in a database, we have to insert it. <br>";
            } else {
                    echo " <br> Station does exist in a database, so we will update the measurments. <br>";
           }
    }

答案基于PaulH的评论,我向他表示感谢。教人的好方法,谢谢你的指导

foreach($data\u数组作为$row){
//来自阵列的站点名称
$station_name=$row['name_station'];
//质疑
$sql_select=“从vwstationmeasurmentdva中选择站点,其中站点='$station_name';
$stmt\u select=$dbh->prepare($sql\u select);
$stmt_选择->执行();
$result\u select=$stmt\u select->fetchAll(PDO::FETCH\u ASSOC);
$number\u of\u rows=计数($result\u select);
if($行数<1){
echo“
数据库中不存在站点,我们必须插入它。
”; }否则{ echo“
数据库中确实存在测站,因此我们将更新测量值。
”; } }
答案基于PaulH的评论,我向他表示感谢。教人的好方法,谢谢你的指导

foreach($data\u数组作为$row){
//来自阵列的站点名称
$station_name=$row['name_station'];
//质疑
$sql_select=“从vwstationmeasurmentdva中选择站点,其中站点='$station_name';
$stmt\u select=$dbh->prepare($sql\u select);
$stmt_选择->执行();
$result\u select=$stmt\u select->fetchAll(PDO::FETCH\u ASSOC);
$number\u of\u rows=计数($result\u select);
if($行数<1){
echo“
数据库中不存在站点,我们必须插入它。
”; }否则{ echo“
数据库中确实存在测站,因此我们将更新测量值。
”; } }
我想你应该换一种方式:对于$data\u数组中的每个站点:查询数据库,比较结果并相应地采取行动(即不做任何事情,插入或更新数据库)。你想知道
$station\u name\u db
是否存在于
$data\u数组中?@换一种方式@保罗,谢谢!因此,通过该语句,我可以检查数据库中是否存在来自外部阵列的特定时间的测站和测量值。我现在该怎么做,如果语句基于此,我可以插入或更新数据?@PaulH,你帮了我很多忙!多亏了你,我想我走对了方向!稍后我会更新我的问题作为答案!我认为你应该用另一种方法来做:对于$data\u数组中的每个站点:查询数据库,比较结果并相应地采取行动(即不做任何事情,插入或更新数据库)。你想知道
$station\u name\u db
是否存在于
$data\u数组
中?反过来@保罗,谢谢!因此,通过该语句,我可以检查数据库中是否存在来自外部阵列的特定时间的测站和测量值。我现在该怎么做,如果语句基于此,我可以插入或更新数据?@PaulH,你帮了我很多忙!多亏了你,我想我走对了方向!稍后我会更新我的问题作为答案!
try {
        // connect to the database
        $dbh = new PDO('pgsql:host='.DB_HOST. ';port=' .DB_PORT. ';dbname=' .DB_NAME, DB_USER, DB_PASS);

        // start transaction
        $dbh->beginTransaction();

        // EDITED
        foreach($data_array as $row){
                $station_external = $row['name_station'];
                $time_external = $row['time'];
                echo $station_external . "<br>";
                echo $time_external . "<br>";


                // query
                $sql_select = "SELECT station, time FROM vwstationmeasurmentdva";
                $stmt_select = $dbh->prepare($sql_select);
                $stmt_select->execute();
                $result_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);

                // print results from sql for view stationmeasurment
                echo "Station and time from database captured with FETCH ASSOC";
                //echo "<h2>Ovo su stanica i vrijeme dohvaceni iz baze podataka samo uz pomoc print_r nakon FETCH ASSOC</h2>";
                echo "<pre>";
                print_r($result_select);
                echo "</pre>";
        } // THE END OF EDIT

                // save transaction
                $dbh->commit();

                // close database connection
                $dbh = null;

} catch (PDOException $e) {
                // cancel the transaciton if something went wrong and write msg about it
                $dbh->rollBack();
                print "Error!: " . $e->getMessage() . "<br/>";
                die();
}
RC Bilogora
2016-07-01 19:00:00
Station and time from database captured with FETCH ASSOC
Array
(
    [0] => Array
        (
            [station] => RC Bilogora
            [time] => 2016-07-01 16:00:00
        )

    [1] => Array
        (
            [station] => Bjelovar
            [time] => 2016-07-01 16:00:00
        )
...
Bjelovar
2016-07-01 19:00:00
Station and time from database captured with FETCH ASSOC
Array
(
    [0] => Array
        (
            [station] => RC Bilogora
            [time] => 2016-07-01 16:00:00
        )

    [1] => Array
        (
            [station] => Bjelovar
            [time] => 2016-07-01 16:00:00
        )
...
    foreach($data_array as $row){
            // station name from array
            $station_name = $row['name_station'];

            // query
            $sql_select = "SELECT station FROM vwstationmeasurmentdva WHERE station='$station_name'";
            $stmt_select = $dbh->prepare($sql_select);
            $stmt_select->execute();
            $result_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);

            $number_of_rows = count($result_select);
            if ($number_of_rows < 1){
                    echo " <br> Station doesn't exist in a database, we have to insert it. <br>";
            } else {
                    echo " <br> Station does exist in a database, so we will update the measurments. <br>";
           }
    }