PHP array_search无效

时间:2011-07-12 04:08:31

标签: php arrays search

任何人都可以告诉我为什么array_search对我不起作用?我想要的只是搜索值并获得相应的键值 例如,如果我搜索wiliam我应该得到4 ..它很简单,但不适合我

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

7 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

array_search()搜索值,而不是键。

如果要检查是否存在用作数组中键的内容,可以使用isset:

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

答案 2 :(得分:0)

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

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

        }

答案 3 :(得分:0)

更改

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

用这个

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

答案 4 :(得分:0)

array_search仅适用于标量数据数组。您正在尝试搜索阵列数组。您可以自己轻松搜索阵列:

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,我误读了你的代码。但是,您仍然可以使用它来搜索原始数组,因此我将留下答案以供参考。

答案 5 :(得分: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);

答案 6 :(得分:0)

您可以删除$userdbname="'".$fqlResult[$i]['name']."'";中的引号 将其重写为

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