PHP - in_array并没有找到我的价值

时间:2014-03-24 16:27:05

标签: php pdo

我是一个新手,我遇到了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)){....

尽管$ userUsers中没有$ username,但是如果用户存在,它也会跳到其他地方:(

使用

之前设置

$ username

$username = $_POST['name'];

并按原样工作(我可以毫无问题地回应它,是完全没有空格或任何东西的测试或测试2)

我真的很环顾四周,但我在这里找不到像我这样的问题......你能帮助我吗?

由于

4 个答案:

答案 0 :(得分:2)

虽然问题本身很愚蠢,因为你必须意识到你正在使用的数组,基于PDO标签的快速解决方案如下:而不是fetchAll()使用fetchAll(PDO::FETCH_COLUMN) < / p>

或者,你也需要学习SQL,并且找不到用户从数据库中选择ALL是没有意义的,而是要求数据库为你找到一个用户

$stm = $pdo->prepare("SELECT * FROM table WHERE name=?");
$stm->execute(array($_POST['name']));
$user = $stm->fetch();

if ($user) { // <---HERE YOU GO

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您正在二维数组中搜索"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";
}

答案 3 :(得分:-1)

如果您正在使用:

while($ row = mysql_fetch_assoc($ result){

$ data [] = $ row }

删除[]以不创建多维数组。