【问题标题】:PHP - in_array isn't finding my value [duplicate]PHP - in_array 没有找到我的价值[重复]
【发布时间】:2014-05-02 03:29:47
【问题描述】:

我是新手,我遇到了 in_array 的问题...

这是我的数组 $allUsers(由用户名的 SQL 查询接收)

    Array
(
    [0] => Array
        (
            [name] => test
        )

    [1] => Array
        (
            [name] => test2
        )

    [2] => Array
        (
            [name] => admin
        )

    [3] => Array
        (
            [name] => kingChräbi
        )

现在如果有新成员想注册,我想检查这个数组是否已经存在:

if(!in_array($username,$allUsers)){....

即使它是当 $username 不在 $allUsers 中时...。如果用户存在,它也只是跳到 else :(

$username 之前用

设置
$username = $_POST['name'];

并按应有的方式工作(我可以毫无问题地回显它,完全是 test 或 test2 没有空格或任何东西)

我确实环顾四周,但在这里找不到像我的问题一样的东西...你能帮帮我吗?

谢谢

【问题讨论】:

  • in_array() 需要一维数组。您当前正在传递一个二维数组。这就是它不起作用的原因。
  • 好吧,所以我应该写一个返回真/假的函数,里面有一个 foreach。

标签: php pdo


【解决方案1】:

您正在二维数组中搜索 "name" 键下的值。
使用array_map() 或简单的foreach 循环应该可以工作-

$username = "admin";
$key = "name";
if(!in_array($username,array_map(function($v)use($key){return $v[$key];},$allUsers))){
    echo "No found";
}else{
    echo "Found";
}

【讨论】:

    【解决方案2】:

    如果您正在使用:

    而 ($ row=mysql_fetch_assoc ($ result) {

    $ 数据 [] = $ 行 }

    去掉 [] 不创建多维数组。

    【讨论】:

      【解决方案3】:

      虽然问题本身很傻,因为你必须意识到你正在使用什么数组,基于 PDO 标记的快速解决方案如下:而不是 fetchAll() 使用 fetchAll(PDO::FETCH_COLUMN)

      或者,你也需要学习 SQL,而不是通过从数据库中选择所有用户来找到用户,这没有任何意义,而是通过要求数据库为你找到用户

      $stm = $pdo->prepare("SELECT * FROM table WHERE name=?");
      $stm->execute(array($_POST['name']));
      $user = $stm->fetch();
      
      if ($user) { // <---HERE YOU GO
      

      【讨论】:

      • 明白了!谢谢你,先生!
      • 希望您只需要使用第二个选项。
      【解决方案4】:

      in_array() 不适用于多维数组。您最好将数组展平,然后搜索关键字。

      $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); //<-- Pass your array here
      $new_arr = array();
      foreach($it as $v) {
          $new_arr[]=$v;
      }
      if(in_array('test',$new_arr))
      {
          echo "Exists !";
      }
      

      Working Demo

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 2011-10-21
        • 1970-01-01
        • 2014-07-26
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        相关资源
        最近更新 更多