0

我有一个输入字段和一组来自 DB 表的电子邮件。

我正在比较输入字段与数组的相似性。

但是有些方法,我被困在循环中。

该循环检查是否将每封电子邮件与输入字段进行比较?

无论我输入的内容是否相同,它总是将我带到 google.com

这是来自控制器的代码:

if (isset($_POST['btn_free_download']))
                {
                    // Get current input email from input field
                    $email = $this->getRequest()->getParam('email');
                    // Get all emails from the user
                    $referred_users = $this->_helper->user()->getReferredUsers()->toArray();
                    // Check the similarity which it with a loop
                    foreach ($referred_users as $referred_user)
                    {
                       similar_text($email, $referred_user['email'], $similar);
                    }
                    // If yes, Pop up message or redirect to some page
                    if ($similar < 97)
                    {
                        $this->_redirect('http://google.com');
                    }
                    // If not, redirect user to free download page
                    else 
                    {
                        $this->_redirect('http://yahoo.com');
                    }
 }
4

1 回答 1

1

我认为您需要查看手册。Foreach 函数与您在 zend 或任何其他框架或仅原始 php 上使用它相同。

$referred_users = $this->_helper->user()->getReferredUsers()->toArray();

$referred_users 可能会保存来自表用户的一系列电子邮件,例如:

$referred_users = array("one@email.com", "two@email.com", "three@email.com")

然后当您使用 foreach 循环时,它将遍历数组中的每封电子邮件

foreach ($referred_users as $referred_user)
{
   // for the first loop $referred_user = one@email.com, for second time $referred_user = two@email.com and goes on
    similar_text($email, $referred_user['email'], $similar);
}

现在让我们在这里讨论您的逻辑:

                   // If yes, Pop up message or redirect to some page
                    if ($similar < 97)
                    {
                        $this->_redirect('http://google.com');
                    }
                    // If not, redirect user to free download page
                    else 
                    {
                        $this->_redirect('http://yahoo.com');
                    }

直到和除非数组 $referred_users 中的最后一个元素完全等于您的 $email

i.e. $email = "three@email.com"

您将始终获得 $similar 低于 97% 的结果,这意味着您将被重定向到谷歌。

我假设您没有尝试这样做,并且可能不熟悉 foreach 函数,这就是您没有得到预期结果的原因。

假设您正在尝试执行类似的操作,如果数组中的任何电子邮件匹配,则检查数组中的电子邮件(如果数组来自表检查从参数输入的电子邮件是否等于表中的任何电子邮件)然后重定向到某个地方或显示一些其他消息。以下解决方案可能对您有所帮助。

   $similarText = false;
   foreach ($referred_users as $referred_user)
   {
       // for the first loop $referred_user = one@email.com, for second time $referred_user = two@email.com and goes on
        similar_text($email, $referred_user['email'], $similar);
        if ($similar > 97) {
            $similarText = true;
            break;
        }
    }


                   // If yes, Pop up message or redirect to some page
                    if ($similarText)
                    {
                        $this->_redirect('http://google.com');
                    }
                    // If not, redirect user to free download page
                    else 
                    {
                        $this->_redirect('http://yahoo.com');
                    }

希望你明白了。但请在将来发布问题之前检查手册。

于 2013-02-01T03:54:01.850 回答