任何人都可以告诉我为什么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);
?>
答案 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'];