繁体   English   中英

在PHP中处理关联数组和foreach

[英]Handling associative array and foreach in PHP

我正在尝试为我的邮件系统编写一个通用函数。

我打算做的是。

  1. 获取数组中的所有to-address值和所需信息
  2. 将所有值存储在数据库中。

我从二维关联数组开始,但是无法在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";
    }
}

备注第一

  • 使用可以告诉我变量内部内容的名称。 $ val => $ key之类的东西什么都不会告诉我。 都不做foreach ( $val as $key1 => $val1 )
  • 缩进:使用它,然后查看psr- *
  • 再次描述发生的事情。 sendMail函数应发送电子邮件。 不打印查询

解决方案

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM