我设计了用于预订房间的系统,并以多维数组形式存储数据。
这是数组(数据):
$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')"
......
}
谢谢你的帮助。
我认为您的问题是您有很多不同的数组($ 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);
注意,我删除了最里面的数组。 当您知道要查找的键时,就不需要遍历数组。
顺便说一句,将变量直接包含在数据库查询中通常是不好的做法。 您应该先逃避它们。 由于这是您指定的值的硬编码数组,因此现在不太可能出错。 但是,一旦您开始使用任何用户输入的值,请确保在它们进入查询附近的任何位置之前先对它们进行转义!