In_array无法正常工作

6

我有一个数组,我使用in_array函数来查找其中的一个特定数字,但是它没有返回任何结果,尽管数据确实存在于该数组中。。:(

数组:

 Array
(
[0] => SimpleXMLElement Object
    (
        [0] => 572140
    )

[1] => SimpleXMLElement Object
    (
        [0] => 533167
    )

[2] => SimpleXMLElement Object
    (
        [0] => 572070
    )

[3] => SimpleXMLElement Object
    (
        [0] => 572383
    )

[4] => SimpleXMLElement Object
    (
        [0] => 285078
    )

[5] => SimpleXMLElement Object
    (
        [0] => 430634
    )
}

我正在使用的代码:
 if(in_array('285078',$arr))
    {
        echo 'yes';
    }
    else
    {
       echo "No";
    }

这是我从xml文件中创建的数组。
 $arr = array();
 foreach($xmlInjury as $data)
 {
  array_push($arr,$data->player_id);
 }

它只显示“NO”.. 请帮我解决这个问题...


1
我认为这是因为“对象数组”介入其中的缘故。可能正是因为这个原因它才不能工作。 - Khushboo
1
你有一个对象数组。循环遍历它们并检查你的值是否在其中。 - Rimble
你如何获取这个数组?如果可以的话 - 改变它。 - u_mulder
1
你无法在数组中找到“'285078'”,因为它不在数组中。你所拥有的是一个SimpleXMLElement对象数组。 - Yoshi
1
在获取数据后,将其保存在数组中。在此过程中,请勿将“SimpleXMLElement”添加到数组中,而是添加其所代表的值。 - Yoshi
显示剩余6条评论
4个回答

18
你需要先将它们全部转换,然后再进行搜索。像这样:
$new_arr = array_map(function($piece){
    return (string) $piece;
}, $arr);

// then use in array
if(in_array('285078', $new_arr)) {
    echo 'exists';
} else {
    echo 'does not exists';
}

3

首先,您的数组不是字符串数组,而是对象数组。 如果无法更改数组结构,请尝试以下方法:

foreach ($your_array as $item) {
    if (strval($item) == '25478') {
        echo 'found!';
        break;
    }
}

如果您想更改数组,请按照以下方式添加项目:
$your_array[] = strval($appended_value);

之后,您可以使用in_array

1

in_array不支持递归查找,只能在第一层进行搜索。 而你的数组的第一层成员是SimpleXMLElement对象,而不是数字。


0
尝试使用类型转换对您的数组进行操作:-
$array =  (array) $yourarray;
if(in_array('285078',$arr))
    {
        echo 'yes';
    }
    else
    {
       echo "No";
    }

将数组转换为数组?嗯嗯 - u_mulder
我认为仍然没有搜索。 - Rakesh Sharma
它不会被强制转换类型吗? - Khushboo
将对象转换成数组? - Rakesh Sharma
是的,所以他只得到数组而不是对象数组。 - Khushboo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接