对PHP数组

时间:2017-08-08 09:14:53

标签: php arrays function loops

我目前正在开展一个项目,要求我将单个表单字段中的数据发布到脚本中,然后执行以下操作:

  1. 由于发布的数据格式为“value1:value2 value3:value4”,依此类推,将其分解为数组并删除空格和冒号。
  2. 对于每2个连续值(0和1,2和3,4和5等),将这2个值注册为2个单独的变量,并执行某个操作(HTTP请求到我的服务器,返回TRUE或比较2个值后的FALSE响应)
  3. 根据服务器发回的响应,在同一页面上打印每个对的特定文本。
  4. 这是我到目前为止所得到的:

    if(!empty($_POST['data']))  {
        $post = $_POST['data'];
        $array = explode(" ", $post);
    
        foreach($array as $k=>$v)   {
    
            $array[$k] = explode(':', $v);
            $username = $array[$k][0];
            $password = $array[$k][1];
    
            function IMAP($username, $password)  {
    
                $domain_hostname= '{imap.domain.net:993/imap/ssl}INBOX';
                $domain_username= $username;
                $domain_password= $password;
    
                $imap_inbox = @imap_open($domain_hostname,$domain_username,$domain_password,0,1);
    
                if($imap_inbox == true)  {
    
                    imap_close($imap_inbox);
                    $valid = "1";
                    echo $domain_username. "/" . $domain_password. " is a valid combination.\r\n";
                }
                else  {
    
                    $error_array = imap_errors();
                    $error = $error_array[0];
                    $error_string = "[AUTHENTICATIONFAILED] Authentication failed.";
                    $error_string2 = "LOGIN failed";
    
                    if (strpos($error, $error_string) !== false) {
                        $valid = "0";
                        echo $domain_username. "/" . $domain_password. " is an invalid combination.\r\n";
    
                    }
    
                    if (strpos($error, $error_string2) !== false) {
    
                        $valid = "0";
                        echo $domain_username. "/" . $domain_password. " is an invalid combination.\r\n";
                    }
                }
            }
            IMAP($username, $password);
        }
    }
    

    在我对已发布的字符串进行双重爆炸以删除空格和冒号之后,我最终得到$array[0][0]$array[0][1]形式的数组作为第一对(value1:value2) ,然后$ array [1] [0]和$ array [1] [1]用于第二对(value3:value4),依此类推。

    如何对每个2个值进行反复操作,在同一页面的上下文中反复重复某个操作,然后根据响应,为每对编辑相应的文本?< / p>

    一旦我运行上面的代码,并且POST包含2组用户名/密码,IMAP服务器只检查第一组,而不是第二个被验证,我得到一个致命的错误说:< / p>

      

    致命错误:无法重新声明IMAP()(之前已声明)

    为什么它停止而不是对第二对做同样的事情?

2 个答案:

答案 0 :(得分:0)

[AcceptVerbs("DELETE")]
[Route("MicrosoftDynamicsContactFieldMappings({key})")]
public IHttpActionResult Delete([FromUri] int key)
{
}

[AcceptVerbs("PATCH", "MERGE")]
[Route("MicrosoftDynamicsContactFieldMappings({key})")]
public IHttpActionResult Patch([FromODataUri] int key, 
       Delta<MicrosoftDynamicsContactFieldMapping> item)
{
}

只需编写一个函数来执行您想对该数据执行的任何操作,在爆炸时将它们传递给两个参数并打印函数的输出?

答案 1 :(得分:0)

你不能在foreach循环中声明你的函数 - php被告知在每次迭代时重新声明相同的函数。

只需在开始时声明该函数,并在循环内多次调用它。

function IMAP($username, $password){
    $domain_hostname= '{imap.domain.net:993/imap/ssl}INBOX';
    $domain_username= $username;
    $domain_password= $password;
    $imap_inbox = @imap_open($domain_hostname,$domain_username,$domain_password,0,1);

    if($imap_inbox == true){
        imap_close($imap_inbox);
        $valid = "1";
        echo $domain_username. "/" . $domain_password. " is a valid combination.\r\n";
    }else{
        $error_array = imap_errors();
        $error = $error_array[0];
        $error_string = "[AUTHENTICATIONFAILED] Authentication failed.";
        $error_string2 = "LOGIN failed";
        if(strpos($error, $error_string) !== false){
            $valid = "0";
            echo $domain_username. "/" . $domain_password. " is an invalid combination.\r\n";
        }
        if(strpos($error, $error_string2) !== false){
            $valid = "0";
            echo $domain_username. "/" . $domain_password. " is an invalid combination.\r\n";
        }
    }
}
if(!empty($_POST['data'])){
    $post = $_POST['data'];
    $array = explode(" ", $post);
    foreach($array as $k=>$v){
        $array[$k] = explode(':',$v);
        $username = $array[$k][0];
        $password = $array[$k][1];
        IMAP($username, $password);
    }
}

这将消除您的错误。