2014-09-30 54 views
2

我已經知道問題的原因,不在代碼中... 字段內容分別在每行的基值處分別爲 所以用過str_replace要刪除的行

$query = $db->query_first("SELECT * FROM table "); 
$array1 = explode(",",$query[filed1]); 
$array1 = str_replace("\n","",$array1); 
$array2 = explode(",",$query[filed2]); 
$array2 = str_replace("\n","",$array2); 

foreach($array1 as $value) 
{ 
    if (in_array($value,$array2)) 
    { 
     //true 
    }else{ 
     //false 
    } 
} 

我有一個問題,當我檢查if Each value in $array2 the present in $array1 or not

表中的數據:

filed1    | filed2 
ahmed,jon,maya,omar | omar,maya 

我的代碼:

$query = $db->query_first("SELECT * FROM table "); 
$array1 = explode(",",$query[filed1]); 
$array2 = explode(",",$query[filed2]); 

     $length = count($array1); 
     for ($i = 0; $i < $length; $i++) 
     { 
     if (in_array($array1[$i] , $array2)) 
     { 
     //true 
     }else{ 
     //false 
     } 
     } 

或本:

$query = $db->query_first("SELECT * FROM table "); 
$array1 = explode(",",$query[filed1]); 
$array2 = explode(",",$query[filed2]); 

foreach($array1 as $value) 
{ 
    if (in_array($value,$array2)) 
    { 
     //true 
    }else{ 
     //false 
    } 
} 

我的問題是我的代碼不工作很好,我肯定是我的查詢得出的結果和數組了。

輸出數組1的:數組2的

Array ([0] => maya [1] => omar [2] => ahmed [3] => join) 

輸出:

Array ([0] => omar [1] => maya) 

所以,哪裏是錯在我的代碼?!

注:

我不想check all value from array2 are in array1,我想check if Each value in $array2 the present in $array1 or not - 這個詞Each valueall value

像FOUCS:

if (in_array('omar',$array1)) 
{ 
echo 'found'; 
}else{ 
echo 'not found'; } 
if (in_array('maya',$array1)) 
{ 
echo 'found'; 
}else{ 
echo 'not found'; 
} if (in_array('jon',$array1)) 
{ echo 'found'; 
}else{ 
echo 'not found'; 
} 
elc ... 

但我不要這樣想,我希望它在循環內。

+0

你的代碼看起來不錯! (兩個版本!)所以檢查你的數組是否有內容,並確保代碼中沒有任何錯誤。 – Bill 2014-09-30 01:54:08

+0

@Billy是啊iam肯定有關數組的結果,我把它放在上面,並且不要顯示任何錯誤 – 2014-09-30 01:56:41

+0

我不是指檢查輸出的錯誤我的意思是必須有一個錯誤(如在,不是你想要的,即使代碼仍然運行)在你的代碼中。這可能是值得通過您的代碼與調試工具,如XDebug – Bill 2014-09-30 01:59:11

回答

0

我知道問題的原因,而不是在代碼...在每行的基值 內容字段的單獨 所以用於str_replace刪除線

$query = $db->query_first("SELECT * FROM table "); 
$array1 = explode(",",$query[filed1]); 
$array1 = str_replace("\n","",$array1); 
$array2 = explode(",",$query[filed2]); 
$array2 = str_replace("\n","",$array2); 

foreach($array1 as $value) 
{ 
    if (in_array($value,$array2)) 
    { 
     //true 
    }else{ 
     //false 
    } 
} 
+1

你好奧馬爾,其實這就是我在想什麼,原來的內容可能有新行,whitspaces等,這就是爲什麼在我的修訂中,我使用了每個數組的'trim',所以它確保循環內的每個比較都將被正確處理,無論如何,它的好處你找到了你的方式 – Ghost 2014-09-30 02:10:05

+0

@Ghost - thnx兄弟 - 但如果'修剪'刪除'whitspaces'將不會得到原創內容,因爲這裏數據我只把名字,如果我把這樣的值'奧馬爾亞當,幽靈騎士,奧馬爾dealo,elc..'陣列將是'omaradam,ghostrider,omardealo,elc ..' – 2014-09-30 04:55:41

+0

哦,好吧,無論如何,即時通訊很高興它的工作,順便說一句,只是一個建議,是索姆發生了什麼事情,有些部分沒有工作,你也可以嘗試'strpos'來搜索 – Ghost 2014-09-30 06:57:15

2

是的,你可以在此情況下,使用一個循環,如果你真的想,一個簡單的foreach應該足夠了:

$array1 = array_map('trim', $array1); // on explode make sure remove trailing/leading spaces 
$array2 = array_map('trim', $array2); 

foreach($array1 as $name) { // so each value of array1 
    if(in_array($name, $array2)) { // is compared inside the contents of array2 
     // if found 
     echo "$name is found in " . '$array2'; 
    } else { 
     echo "$name is NOT found in " . '$array2'; 
    } 
} 
+0

這會出現OP已經嘗試過這 – Bill 2014-09-30 01:51:20

+0

@Ghost耶不工作,我已經嘗試過,看看我的代碼.. thnx – 2014-09-30 01:52:17

0

我想你應該可以遍歷數組2所以數組2的所有值進行檢查,而不是周圍的其他方式,因爲你說:「

檢查,如果在$每個數組2 ...值

$query = $db->query_first("SELECT * FROM table "); 
$array1 = explode(",",$query['filed1']); 
$array2 = explode(",",$query['filed2']); 

foreach($array2 as $value) 
{ 
    if (in_array($value,$array1)) 
    { 
     //true 
    }else{ 
     //false 
    } 
} 
+0

thnx ..我已經知道問題的原因,不在我的代碼中,放在解決方案 – 2014-09-30 02:11:21

0

array_diff()是單功能的方法來獲得項目的數組不存在進一步陣列

$array1 = array('ahmed','jon','maya','omar'); 
$array2 = array('omar','maya'); 
$result = array_diff($array1,$array2); // Array ([0] => ahmed [1] => jon) 

您可能需要切換參數以達到你所期望的結果。

你也可以使用array_intersect()進行反向

+0

thnx ..我已經知道問題的原因,不在我的代碼中,放在解決方案 – 2014-09-30 04:57:01

0

@鬼的解決方案產生正確的輸出,但你的狀態,你知道這個問題是不是你的代碼。顯然問題是你正在查詢的數據格式不完全匹配。所以,這裏是你如何處理調試這個問題:

的var_dump()的數據

的犯罪嫌疑人很可能是某些數據有填充。 (這是奇怪的是,微調的結果@鬼的建議沒有奏效。)

$array1 = explode(",",$query['filed1']); 
    $array2 = explode(",",$query['filed2']); 
    var_dump($array1); 
    echo "\n"; 
    var_dump($array2); 
    echo "\n"; 

檢查比較在迭代

以上應該發現問題。如果沒有,你可以更深入一步,看看in_array中的哪一個確切的比較失敗。如果你沒有可用的xdebug,只需在循環中循環:

foreach ($array1 as $value) { 
     if (in_array($value, $array2)) { 
      echo "\n[$value found in \$array2]\n"; 
     } else { 
      echo "\n[$value NOT found in \$array2]\n"; 
     } 

     foreach ($array2 as $value2) { 
      if ($value !== $value2) { 
       echo "\$array1's '$value' !== \$array2's '$value2'\n"; 
      } else { 
       echo "\$array1's '$value' === \$array2's '$value2'\n"; 
      } 
     } 
    } 

輸出結果會告訴你到底發生了什麼錯誤。

注意:因爲您將它們用作字符串鍵,所以應該在引號中包含filed1和filed2。當PHP解析你的代碼時,它會發出通知(錯誤)並退回到將其解釋爲字符串。

+0

thnx上方..我已經知道問題的原因,不在我的代碼中,放在解決方案的上方 – 2014-09-30 04:49:31