[英]Handling associative array and foreach in PHP
我正在尝试为我的邮件系统编写一个通用函数。
我打算做的是。
我从二维关联数组开始,但是无法在foreach中检索值。
最后,foreach echo语句应类似于
insert into my_table('name','to_address','subject','message','add_cc') values ('Author1','author1@gmail.com','Subject','Message','test@gmail.com');
insert into my_table('name','to_address','subject','message','add_cc') values ('Author2','author2@gmail.com','Subject','Message','test@gmail.com');
insert into my_table('name','to_address','subject','message','add_cc') values ('Author3','author3@gmail.com','Subject','Message','test@gmail.com');
下面是我的代码,我知道问题出在foreach循环上。 即使没有数字序列lik [0],[1],[2]最小化关联数组,我也很高兴。
<?php
$to_address = array(
array( 'Name' => "Author1", 'Email' => 'author1@gmail.com' ),
array( 'Name' => "Author2", 'Email' => 'author2@gmail.com' ),
array( 'Name' => "Author3", 'Email' => 'author3@gmail.com')
);
$subject = "Subject";
$message = "Message";
$add_cc = "test@gmail.com";
sendMail($to_address,$subject,$message,$add_cc);
function sendMail($to_address,$subject,$message,$add_cc) {
foreach ($to_address as $key => $val) {
foreach ($val as $key1 => $val1) {
print_r($val1);
}
}
}
?>
谢谢,金兹
编辑:
换句话说,我无法循环$ to_address值,需要帮助。
这就是你想要的吗? 您可以只使用一个foreach并将每个数组放入INSERT
。
$to_address = array(
array( 'Name' => "Author1", 'Email' => 'author1@gmail.com' ),
array( 'Name' => "Author2", 'Email' => 'author2@gmail.com' ),
array( 'Name' => "Author3", 'Email' => 'author3@gmail.com')
);
$subject = "Subject";
$message = "Message";
$add_cc = "test@gmail.com";
sendMail($to_address,$subject,$message,$add_cc);
function sendMail($to_address,$subject,$message,$add_cc) {
foreach ($to_address as $val) {
$sql = "INSERT INTO my_table('name','to_address','subject','message','add_cc')
VALUES ('".$val['Name']."','".$val['Email']."','".$subject."','".$message ."','".$add_cc."');";
echo $sql . "<br>";
//Use your Insert Statement
}
}
您可以在单个foreach中检索值:
function sendMail($to_address,$subject,$message,$add_cc){
foreach ($to_address as $val) {
$name = $val["Name"];
$email = $val["Email"];
echo "Name: $name, Email: $email <br\>\n";
}
}
foreach ( $val as $key1 => $val1 )
$mailReceivers = array(
array( 'Name' => "Author1", 'Email' => 'author1@gmail.com' ),
array( 'Name' => "Author2", 'Email' => 'author2@gmail.com' ),
array( 'Name' => "Author3", 'Email' => 'author3@gmail.com')
);
$subject = "Subject";
$message = "Message";
$add_cc = "test@gmail.com";
foreach ( $mailReceivers as $receiver )
{
parseMail($reciever['Name'], $reciever['Email'], $subject, $message, $add_cc);
}
function parseMail($name, $email, $subject, $message, $cc)
{
print 'INSERT INTO my_table ('name','to_address','subject','message','add_cc') VALUES ('. $name .', '. $email .', '. $subject .', '. $message .', '. $subject .')';
}
我调用了parseMail函数,因为我认为您不希望打印插入语句。 称它为您想要的。
您似乎也不知道foreach的工作原理。 试一下,看看$key => $val
意味着什么。
我也将foreach移出了功能,这使它更可移植且更易于阅读。
这是您想要的代码-这将创建您需要的插入查询。
<?php
$to_address = array( array( 'Name' => "Author1", 'Email' => 'author1@gmail.com' ),
array( 'Name' => "Author2", 'Email' => 'author2@gmail.com' ),
array( 'Name' => "Author3", 'Email' => 'author3@gmail.com')
);
$subject = "Subject";
$message = "Message";
$add_cc = "test@gmail.com";
sendMail($to_address,$subject,$message,$add_cc);
function sendMail($to_address,$subject,$message,$add_cc){
foreach ($to_address as $key => $val) {
$sqlStatement = "INSERT INTO my_table('name','to_address','subject','message','add_cc') VALUES ('".$val['Name']."','".$val['Email']."','".$subject."','".$message ."','".$add_cc."');";
echo "$sqlStatement <br/>";
}
}
?>
这是你想要的吗?
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
foreach ($to_address as $val) {
$sql = "insert into my_table('name','to_address','subject','message','add_cc') values (?,?,?,?,?)";
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, $val['Name'], $val['Email'], $subject, $message, $add_cc);
);
mysqli_query($link, $sql);
}
function sendMail($to_address,$subject,$message,$add_cc){
foreach ($to_address as $key => $val) {
extract($val);
// use the keys of $val array as variable names
// http://php.net/manual/en/function.extract.php
// sql for data base query
$sql = "INSERT INTO my_table('name','to_address','subject','message','add_cc') VALUES ('".$Name."','".$Email."','".$subject."','".$message ."','".$add_cc."');";
echo $sql;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.