2013-01-31 248 views
0

我有一個輸入字段和數據庫表中的一個電子郵件數組。Zend Php Foreach循環數組

我正在比較輸入字段與數組的相似性。

但一些如何,我堅持循環。

該循環檢查是否將每個電子郵件與輸入字段進行比較?

它總是帶給我到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'); 
        } 
} 
+0

您已聲明$ referenced_users,但是隨後您使用$ this-> referenced_users啓動循環。這應該是同一個變量。 – Martin

+0

function similar_text是做什麼用的?最初什麼是$類似的? – Dylan

+1

@Dylan http://php.net/manual/en/function.similar-text.php檢查手冊,$ similar是作爲第三個參數傳入的相似文本的百分比,similar_text()將計算你的百分比相似性。 –

回答

1

我認爲你需要檢查manual。 Foreach函數在zend或任何其他框架或純PHP上使用它都是一樣的。

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

$ referred_users可能會從表中 用戶保持電子郵件的數組,說:

$referred_users = array("[email protected]", "[email protected]", "[email protected]") 

那麼當你使用foreach循環將通過每個迭代 陣列中的電子郵件

foreach ($referred_users as $referred_user) 
{ 
    // for the first loop $referred_user = [email protected], for second time $referred_user = [email protected] 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的最後一個元素是完全等於你的$電子郵件

i.e. $email = "[email protected]" 

你會總是給予$類似的結果小於97%,這意味着你將被重定向到谷歌。

我認爲你沒有嘗試去做,可能不熟悉foreach函數,這就是爲什麼你沒有得到預期的結果。

假設你試圖做類似的事情,檢查數組中的電子郵件是否與數組中的任何電子郵件匹配(如果數組是從表中檢查從param輸入的電子郵件是否等於任何電子郵件表),然後重定向到某處或顯示一些消息,繼續進行。以下解決方案可能對您有所幫助。

$similarText = false; 
    foreach ($referred_users as $referred_user) 
    { 
     // for the first loop $referred_user = [email protected], for second time $referred_user = [email protected] 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'); 
        } 

希望你有想法。但請在將來發布問題之前查看手冊。

+0

謝謝,我會嘗試像你說的,看看它是否有效。對於遲到的回覆感到抱歉... –

+0

而且是我想要的,檢查是否有任何電子郵件匹配的數組中,如果其中一個匹配的數組中的第一個將退出。 –

+0

不客氣。 –