从一个键中分离两个数组值,然后插入到PHP数据库中

问题描述 投票:0回答:1

我设计了用于预订房间的系统,并以多维数组形式存储数据。

这是数组(数据):

$recordBooking = array(
            "111"=>array(
                "date"=>array(
                    "29/10/2014"=>array(
                        array(
                            "from"=>1,
                            "to"=>3,
                            "user"=>"Amy",
                            "username"=>"CB34"
                                ),
                        array(
                            "from"=>4,
                            "to"=>5,
                            "user"=>"Chars",
                            "username"=>"AA13"
                                )   
                        ),
                    "30/10/2014"=>array(
                        array(
                            "from"=>2,
                            "to"=>3,
                            "user"=>"Chars",
                            "username"=>"AA13"
                                ),
                        array(
                            "from"=>3,
                            "to"=>6,
                            "user"=>"Gary",
                            "username"=>"SF11"
                                )
                        ),
                    "02/11/2014"=>array(
                        array(
                            "from"=>1,
                            "to"=>3,
                            "user"=>"Billy",
                            "username"=>"V214"
                                )
                        ),

                     .......

                    )
                )
        );

我还使用了foreach循环来分离数组值并存储这些数据。 我使用数组$ BookArrRecord收集值并将其插入数据库。 它导致了错误,即$ BookArrRecord只能存储每个日期的最后一个值。 谁能帮助我找出问题以及如何改善?

 foreach($recordBooking as $key => $value){
    $rmNum[] = $key;
    foreach($value as $k => $v){
        foreach($v as $bookDate => $array){
            $bookingDate[] = $bookDate;
            foreach($array as $room => $info){
                foreach($info as $period =>$fromTo){
                        if($period=="username"){
                            $userID[] = $fromTo;
                        }
                        if($period=="from"){
                            $from[] = $fromTo;
                        }
                        if($period=="to"){
                            $to[] = $fromTo;
                        }
                    }
                }
        }
    }                   
}

   for($rmCount=1;$rmCount<count($userID);$rmCount++){//get the $userID to set the rows of $rmNum
        $rmNum[]+=$rmID[0];
    }

    $BookArrRecord = array();
    foreach($rmNum as $key => $value){
        $BookArrRecord[] = "('" . $userID[$key] . "', '" . $rmNum[$key] . "', '". $bookingDate[$key] . "', '" . $from[$key] . "', '" . $to[$key] . "')";            
    }

sql查询:

    $bookingInformation = "INSERT INTO `bookRecord` (`userID`, `room_Number`, `date`, `frome`, `to`) 
                            VALUES " . implode(',', $BookArrRecord);

查询查询:

    if(!mysql_query($bookingInformation, $dbConnection)){
            die("Cannot access operation of Database(bookRecord): " . mysql_error()) . "<br>";
        }else{
            echo "Records added in table: BookingDate " . "<br>";
        }

通过使用var_dump显示结果:

    array(268) {
     [0]=>
     string(38) "('CB34', '111', '29/10/2014', '1', '3')"
     [1]=>
     string(38) "('AA13', '111', '30/10/2014', '4', '5')" //the date is wrong
     [1]=>
     string(38) "('AA13', '111', '02/11/2014', '2', '3')"
      ......
    }

谢谢你的帮助。

php mysql arrays for-loop multidimensional-array
1个回答
0
投票

我认为您的问题是您有很多不同的数组($ userID,$ rmNum,$ bookingDate等),它们在不同的时间添加值。 这使得很难跟踪每个数组中的哪个值对应于其他数组中的哪个值。 (这是可能的,但很棘手,并可能导致错误)。

一个更简单的解决方案是在foreach循环中处理将记录添加到$ BookArrRecord的情况。 这样,您就知道所有不同的值都是一致的。

例如:

$BookArrRecord = array();
$roomNumber = 1;
foreach($recordBooking as $key => $value){
    $rmNum[] = $key;
    foreach($value as $k => $v){
        foreach($v as $bookDate => $array){
            foreach($array as $room => $info){
                $BookArrRecord[] = "('" . $info['username'] . "', '" . $roomNumber . "', '". $bookDate . "', '" . $info['from'] . "', '" . $info['to'] . "')";   
                $roomNumber++;
            }
        }
    }                   
}
var_dump ($BookArrRecord);

注意,我删除了最里面的数组。 当您知道要查找的键时,就不需要遍历数组。

顺便说一句,将变量直接包含在数据库查询中通常是不好的做法。 您应该先逃避它们。 由于这是您指定的值的硬编码数组,因此现在不太可能出错。 但是,一旦您开始使用任何用户输入的值,请确保在它们进入查询附近的任何位置之前先对它们进行转义!

© www.soinside.com 2019 - 2024. All rights reserved.