PHP数组搜索不工作

PHP数组搜索不工作,php,arrays,search,Php,Arrays,Search,有人能告诉我为什么array\u 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'

有人能告诉我为什么array\u 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);
?>

它不起作用,因为
array\u seach
搜索值,“William”是一个键。使事情复杂化的是,
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);
如果您不想将内容用单引号括起来,则需要按如下方式更改
for
循环:

if(isset($userdb['William'])) {
    echo "$userdb[William] is William's uid!";
}
for($i=0;$iarray_search()搜索值,而不是键

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

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

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

        }
用于($i=0;$i更改

用这个

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

array\u search
仅适用于标量数据数组。您正在尝试搜索数组数组。您可以自己轻松搜索数组:

foreach($fqlResult as $result)
{
    $name = $result["name"];
    $uid = $result["uid"];
    $userdb[$name] = $uid;
}
编辑:n/m,我误读了你的代码。但是,你仍然可以使用它来搜索原始数组,因此我将保留答案供参考。

尝试以下操作:

$nameExists = array_key_exists("William",$userdb);
然后您要使用array_key_exists()来查找该键。array_search()仅用于搜索值,而不用于搜索键


您可以删除
$userdbname=“””“$fqlResult[$i]['name']”中的引号;
改写成


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

@Rachit-这将回显“'4'”。您可以让它执行
$user\u id=$userdb[“'William'”];
获取用户ID。@Rachit-我更新了我的答案。首先,你的用户ID用单引号括起来,这就是它不起作用的原因。请参阅我的第一个答案。为防止出现这种情况,请参阅我的第二个答案。如果名称中有空格,如WIlliam Oxford或任何其他特殊字符,该怎么办?我使用单引号进行转义characters@Rachit-你不必对我这么做将数据存储在数组中。这可能是由于在循环中使用“”。您不需要使用它们。您正在添加存储在变量中的额外引号…不确定您是否有意这样做。
$userdbname=“””””。$fqlResult[$i]['name']。“”;
表示$userdbname将作为“userName”打印(加上额外的单引号,而不仅仅是用户名)。与问题无关,但请记住,如果名称不唯一,您可能会遇到这样的问题。
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";
foreach($fqlResult as $result)
{
    $name = $result["name"];
    $uid = $result["uid"];
    $userdb[$name] = $uid;
}
$nameExists = array_key_exists("William",$userdb);