【问题标题】:PHP array_search not workingPHP array_search 不工作
【发布时间】:2011-10-03 07:34:52
【问题描述】:

谁能告诉我为什么 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);
?>

【问题讨论】:

  • 您正在添加存储在变量中的额外引号...不确定您是否故意这样做。 $userdbname="'".$fqlResult[$i]['name']."'"; 表示 $userdbname 将打印为 'userName'(带有额外的单引号,而不仅仅是 userName)。
  • 与问题无关,但请记住,如果名称不是唯一的,您可能会遇到问题。

标签: php arrays search


【解决方案1】:

它不起作用,因为array_seach 搜索值并且“William”是一个键。 为了使事情复杂化,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);

【讨论】:

  • @Rachit - 这将回显“'4'”。您可以通过 $user_id = $userdb["'William'"]; 获取用户 ID。
  • @Rachit - 我更新了我的答案。首先,您的用户 ID 用单引号括起来,这就是它不起作用的原因。请参阅我的第一个答案。为防止这种情况,请参阅我的第二个答案。
  • 如果名字有空格,比如 WIlliam Oxford 或任何其他特殊字符怎么办?我用单引号来转义字符
  • @Rachit - 您不必将数据存储在数组中。
【解决方案2】:

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

如果你想检查你在数组中用作键的东西是否存在,你可以使用 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】:

    改变

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

    有了这个

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        试试这个:

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

        那么您想使用 array_key_exists() 来查找密钥。 array_search() 只适用于搜索值,而不是键。

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-02
            相关资源
            最近更新 更多