2014-03-24 72 views
-1

我對於新手,我得到了與in_array一個問題...PHP - in_array沒有發現我的價值

所以這是我的數組$ ALLUSERS(由SQL查詢的用戶名獲得)

Array 
(
    [0] => Array 
     (
      [name] => test 
     ) 

    [1] => Array 
     (
      [name] => test2 
     ) 

    [2] => Array 
     (
      [name] => admin 
     ) 

    [3] => Array 
     (
      [name] => kingChräbi 
     ) 

現在如果有新成員要註冊,我想這個數組中檢查,如果它已經存在:

if(!in_array($username,$allUsers)){.... 

儘管它已經是在$用戶名不是$ ALLUSERS做....它只是跳過別人也如果用戶是存在:(

$的用戶名與

$username = $_POST['name']; 

之前設置和工作,因爲它應該(我可以重複它沒有問題,是完全測試或測試2無空格或任何)

我真的看了看周圍很多,但我在這裏找不到像我的問題一樣的東西......你能幫我嗎?

感謝

+0

'in_array()'需要**值**和**的單維陣列**。您目前正在傳遞一個2維數組。這就是爲什麼它不起作用。 –

+0

好吧,所以我應該寫一個函數返回true/false與foreach中。 – Michael

回答

2

雖然問題本身是很愚蠢的,因爲你必須意識到你正在使用的快速解決方案的工作是什麼陣列,基於PDO標籤,將如下所示:不是fetchAll()使用fetchAll(PDO::FETCH_COLUMN)

或者說你需要學習SQL的歡迎,並通過所有的數據庫,是沒有意義的選擇他們的方式找到用戶,而是通過詢問數據庫來查找用戶爲你

$stm = $pdo->prepare("SELECT * FROM table WHERE name=?"); 
$stm->execute(array($_POST['name'])); 
$user = $stm->fetch(); 

if ($user) { // <---HERE YOU GO 
+0

得到了!謝謝你,先生! – Michael

+0

希望你得到了,你必須使用第二個選項。 –

0

in_array()不適用於多維數組。你最好壓扁你的數組,然後搜索關鍵字。

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); //<-- Pass your array here 
$new_arr = array(); 
foreach($it as $v) { 
    $new_arr[]=$v; 
} 
if(in_array('test',$new_arr)) 
{ 
    echo "Exists !"; 
} 

Working Demo

-1

如果使用:

雖然($行= mysql_fetch_assoc($結果){

$數據[] = $行 }

刪除[]不創建多維數組。

0

您正在爲"name"的密鑰下的二維數組搜索值。
使用array_map()或簡單foreach循環應該工作 -

$username = "admin"; 
$key = "name"; 
if(!in_array($username,array_map(function($v)use($key){return $v[$key];},$allUsers))){ 
    echo "No found"; 
}else{ 
    echo "Found"; 
}