【问题标题】:Can we pass an array as parameter in any function in PHP?我们可以在 PHP 中的任何函数中将数组作为参数传递吗?
【发布时间】:2011-07-24 11:35:22
【问题描述】:

我有一个向用户发送邮件的函数,我想将其中一个参数作为 id 数组传递。

这可能吗?如果可以,怎么做?

假设我们有一个函数:

function sendemail($id, $userid) {

}

在示例中,$id 应该是一个数组。

【问题讨论】:

    标签: php arrays function


    【解决方案1】:

    您可以将数组作为参数传递。它是按值复制的(或COW'd,,这对您来说本质上是相同的),因此您可以在其上随意使用array_pop()(和类似的),而不会影响外部任何内容。

    function sendemail($id, $userid){
        // ...
    }
    
    sendemail(array('a', 'b', 'c'), 10);
    

    实际上,您只能通过将其类型放入函数的参数签名中来接受一个数组...

    function sendemail(array $id, $userid){
        // ...
    }
    

    你也可以用它的参数作为一个数组来调用函数...

    call_user_func_array('sendemail', array('argument1', 'argument2'));
    

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        是的,你可以这样做。

        function sendemail($id_list,$userid){
            foreach($id_list as $id) {
                printf("$id\n"); // Will run twice, once outputting id1, then id2
            }
        }
        
        $idl = Array("id1", "id2");
        $uid = "userID";
        sendemail($idl, $uid);
        

        【讨论】:

          【解决方案4】:

          这里应该澄清什么。

          调用此函数时只需传递数组。

          function sendemail($id,$userid){
          Some Process....
          }
          $id=array(1,2);
          sendmail($id,$userid);
          

          【讨论】:

            【解决方案5】:
            function sendemail(Array $id,$userid){  // forces $id must be an array
            Some Process....
            }
            
            
            $ids  = array(121,122,123);
            sendmail($ids, $userId);
            

            【讨论】:

              【解决方案6】:

              更酷的是,您可以将可变数量的参数传递给这样的函数:

              function sendmail(...$users){
                 foreach($users as $user){
              
                 }
              }
              
              sendmail('user1','user2','user3');
              

              【讨论】:

              • 这个更好的解决方案适用于类型安全,例如 (Event ...$event)
              【解决方案7】:

              它与任何其他变量没有什么不同,例如

              function sendemail($id,$userid){
                echo $arr["foo"]; 
              }
              
              $arr = array("foo" => "bar");
              sendemail($arr, $userid);
              

              【讨论】:

              • @vickirk :我编辑了您的答案以纠正 $userid 的错误。希望你不介意?
              • 注意,调用函数前不需要定义。你本可以做到的:sendemail(array("foo" => "bar"), ...).
              • @Anonymous Loozah : 当数组长度不太大时。
              • @Gaurav :是的,但无论如何可能都会生成数组。
              • 呃,我刚刚检查了英镑/美元的汇率,也许当我的大脑睡着时我的手指弄糊涂了。干杯@Gaurav
              【解决方案8】:

              在php 5中,还可以提示传递变量的类型:

              function sendemail(array $id, $userid){
                //function body
              }
              

              type hinting

              【讨论】:

                【解决方案9】:

                由于 PHP 是动态弱类型的,你可以将任何变量传递给函数,函数会尽力使用它。

                因此,您确实可以将数组作为参数传递。

                【讨论】:

                  【解决方案10】:

                  是的,我们可以将数组传递给函数。

                  $arr = array(“a” => “first”, “b” => “second”, “c” => “third”);
                  
                  function user_defined($item, $key)
                  {
                      echo $key.”-”.$item.”<br/>”;
                  } 
                  
                  array_walk($arr, ‘user_defined’);
                  

                  我们可以在这里找到更多的数组函数

                  http://skillrow.com/array-functions-in-php-part1/

                  【讨论】:

                    【解决方案11】:

                    我编写了这段代码作为示例。希望这个想法行得通!

                    <?php
                    $friends = array('Robert', 'Louis', 'Ferdinand');
                      function greetings($friends){
                        echo "Greetings, $friends <br>";
                      }
                      foreach ($friends as $friend) {
                      greetings($friend);
                      }
                    ?>
                    

                    【讨论】:

                      【解决方案12】:
                      <?php
                      
                      function takes_array($input)
                      
                      {
                      
                          echo "$input[0] + $input[1] = ", $input[0]+$input[1];
                      
                      }
                      
                      ?>
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2023-02-09
                        • 1970-01-01
                        • 2018-02-01
                        • 2013-08-08
                        • 1970-01-01
                        • 2015-09-19
                        • 1970-01-01
                        相关资源
                        最近更新 更多