PHP中关联数组和foreach的处理

PHP中关联数组和foreach的处理,php,arrays,for-loop,multidimensional-array,foreach,Php,Arrays,For Loop,Multidimensional Array,Foreach,我正在尝试为我的邮件系统编写一个通用函数 我计划做的是 获取数组中的所有地址值和所需信息 将所有值存储在数据库中 我从二维关联数组开始,但无法检索foreach中的值 最后,foreach echo语句应该如下 insert into my_table('name','to_address','subject','message','add_cc') values ('Author1','author1@gmail.com','Subject','Message','test@gmail.com

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

我计划做的是

  • 获取数组中的所有地址值和所需信息
  • 将所有值存储在数据库中
  • 我从二维关联数组开始,但无法检索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循环。即使关联数组在没有像[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_地址值,我需要帮助。

    这就是您想要的吗?您只需使用一个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
              }
    }
    
    $to_address=数组(
    数组('Name'=>'Author1','Email'=>'author1@gmail.com' ),
    数组('Name'=>'Author2','Email'=>'author2@gmail.com' ),
    数组('Name'=>“Author3”,'Email'=>'author3@gmail.com')
    );
    $subject=“subject”;
    $message=“message”;
    $add_cc=”test@gmail.com";
    sendMail($to_address、$subject、$message、$add_cc);
    函数sendMail($to\u address、$subject、$message、$add\u cc){
    foreach($to_地址为$val){
    $sql=“插入我的表格('name'、'to\u address'、'subject'、'message'、'add\u cc')
    值(“$val['Name'.]”、“$val['Email'.]”、“$subject.”、“$message.”、“$add_cc.”)和“;”;
    echo$sql。“
    ”; //使用Insert语句 } }
    您可以在单个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";
        }
    }
    
    函数sendMail($to\u address、$subject、$message、$add\u cc){
    foreach($to_地址为$val){
    $name=$val[“name”];
    $email=$val[“email”];
    echo“Name:$Name,Email:$Email\n”;
    }
    }
    
    这就是你想要的吗

    $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);
    }
    
    先说
    • 使用能告诉我变量内部内容的名称。像$val=>$key这样的东西什么都不告诉我。 也不使用foreach($valas$key1=>$val1)
    • 缩进:使用它,看看psr-*
    • 再次描述正在发生的事情。sendMail函数应发送电子邮件。不打印查询
    解决方案 评论 我调用了parseMail函数,因为我认为您不想打印insert语句。随你怎么说

    你似乎也不知道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/>";
        }
    }
    ?>
    

    简单的数组访问有什么问题?你只需要名字和地址。你所知道的是,数组可能有大量的键值,我只是喜欢使用extract,因为代码变得更可读,变量也变得自解释。是的,它将变得单调乏味,使用数组与吨的关键
    
    $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 .')';
    }
    
    <?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/>";
        }
    }
    ?>