PHP array_search not working

限于喜欢 提交于 2021-02-05 08:29:27

问题


can anybody let me know why array_search doesnt works for me? All i want is to search value and and get corresponding key value for eg if i search wiliam i should get 4.. Its simple but aint working for me

<?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);
?>

回答1:


It doesn't work because array_seach searches values and "William" is a key. To complicate things, your values and keys are wrapped in single quotes during the for loop.

You'd want to do something like this:

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

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

If you don't want things wrapped in single quotes, you'll need to change your for loop as follows:

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);



回答2:


array_search() searches values, not keys.

If you want to check the existence of something that you use as a key in an array, you can just use isset:

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



回答3:


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

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

        }



回答4:


Change

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

with this

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



回答5:


array_search only works with arrays of scalar data. You're trying to search an array of arrays. You can easily search the array yourself:

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";

Edit: n/m, I misread your code. However, you could still use this to search your original array, so I'll leave the answer for reference.




回答6:


try this:

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

then you want to use array_key_exists() to find the key. array_search() only works for searching values, not keys.

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



回答7:


You can remove the quotes in the $userdbname="'".$fqlResult[$i]['name']."'"; rewrite it to

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



来源:https://stackoverflow.com/questions/6659389/php-array-search-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!