2011-07-12 31 views
1

有人可以讓我知道爲什麼array_search不適合我嗎?我想要的是尋找價值,並獲得相應的鍵值爲 例如,如果我搜索威廉·我應該得到4。它的簡單,但AINT爲我工作PHP array_search不起作用

<?php 
$fqlResult[0]['uid']='1'; 
$fqlResult[0]['name']='Jay'; 
$fqlResult[1]['uid']='2'; 
$fqlResult[1]['name']='UserName2'; 
$fqlResult[2]['uid']='3'; 
$fqlResult[2]['name']='Frances'; 
$fqlResult[3]['uid']='4'; 
$fqlResult[3]['name']='William'; 



     for($i=0;$i<count($fqlResult);$i++) 
     { 

      $userdbname="'".$fqlResult[$i]['name']."'"; 
      $userdb[$userdbname]="'".$fqlResult[$i]['uid']."'"; 

     } 


echo "<pre>"; 
print_r($userdb); 
echo "</pre>"; 
echo array_search('4', $userdb); 
?> 
+0

您添加的被存儲的變量中額外的引號...不知道,如果你是在做這個目的與否。 '$ userdbname =「'」。$ fqlResult [$ i] ['name']。「'」;'意味着$ userdbname會打印爲'userName'(帶有多餘的單引號,而不僅僅是userName) 。 –

+0

與問題沒有真正的關係,但請記住,如果名稱不唯一,則可能會遇到問題。 – Matthew

回答

3

它不工作,因爲array_seach搜索值和「威廉」是一個關鍵。 使事情變得複雜,您的值和密鑰在for循環期間被包裝在單引號中。

你會想要做這樣的事情:

if (! empty($userdb["'William'"])) 
{ 
    // Echoes "'4'" 
    echo $userdb["'William'"]; 
} 

// To find user ID "'4'" 
// Outputs "'William'" 
echo array_search("'4'", $userdb); 

如果你不想要的東西包裹在單引號,你需要改變你的for循環如下:

for($i=0;$i<count($fqlResult);$i++) 
{ 
    $userdbname=$fqlResult[$i]['name']; 
    $userdb[$userdbname]=$fqlResult[$i]['uid']; 
} 

if (! empty($userdb["William"])) 
{ 
    // Outputs "4" (without the single quotes) 
    echo $userdb["William"]; 
} 

// To find user ID "4" (without the single quotes) 
// Outputs "William" 
echo array_search('4', $userdb); 
+0

對不起,我編輯我的問題,我想輸入搜索uid = 4 – Rachit

+1

@Rachit - 這將回聲「'4」「。你可以讓它做'$ user_id = $ userdb [''''''''];'來獲得用戶ID。 –

+0

@Rachit - 我更新了我的答案。首先,您的用戶名用單引號包裹,這就是爲什麼它不起作用。看到我的第一個答案。爲了防止這種情況,請看我的第二個答案 –

0

array_search()搜索值而不是鍵。

如果您要檢查的東西,你作爲一個數組的一個關鍵使用的存在,你可以使用isset:

if(isset($userdb['William'])) { 
    echo "$userdb[William] is William's uid!"; 
} 
+0

對不起,我編輯我的問題,我想輸入搜索uid = 4 – Rachit

0
for($i=0;$i<count($fqlResult);$i++) 
     { 

      $userdbname=$fqlResult[$i]['uid']; 
      $userdb[$userdbname]=$fqlResult[$i]['name']; 

     } 
+0

我編輯了我的問題,它仍然不適用於我 – Rachit

+0

它可能是由於「'」你在循環中使用。你不需要使用它們 – Gaurav

0

變化

$userdb[$userdbname]="'".$fqlResult[$i]['uid']."'"; 

與此

$userdb[$i] = "{$fqlResult[$i]['name']}"; 
0

array_search只能工作s與標量數據的數組。您正在嘗試搜索數組數組。您可以輕鬆地自行搜索該陣列:

function search_array_col($array, $col, $val) 
{ 
    foreach ($array as $key => $a) 
    { 
    if ($a[$col] == $val) return $key; 
    } 

    return null; 
} 

echo search_array_col($fqlResult, 'name', 'William') , "\n"; 
echo search_array_col($fqlResult, 'uid', '4') , "\n"; 

編輯:n/m,我誤解了您的代碼。但是,您仍然可以使用它來搜索您的原始數組,因此我將留下供參考的答案。

0

試試這個:

foreach($fqlResult as $result) 
{ 
    $name = $result["name"]; 
    $uid = $result["uid"]; 
    $userdb[$name] = $uid; 
} 

,那麼你要使用array_key_exists()來找到問題的關鍵。 array_search()僅適用於搜索值,不適用於鍵。

$nameExists = array_key_exists("William",$userdb); 
0

您可以刪除引號在$userdbname="'".$fqlResult[$i]['name']."'"; 重寫它

$userdbname= $fqlResult[$i]['name'];