这是$haystack
数组:
Array
(
[438] => stdClass Object
(
[w] => 438
[x] => 0
[y] => 438
[z] => 23
)
[4960] => stdClass Object
(
[w] => 4960
[x] => 0
[y] => 4960
[z] => 37
)
)
为什么这不起作用?如何在$needle
中告诉$haystack
。我收到此错误stdClass could not be converted to int
。
$needle = 438;
if(in_array($needle,$haystack)){
echo "yes";
}else{
echo "no";
}
答案 0 :(得分:1)
您正在寻找值而不是键。它的工作原理如下:
if ($haystack[$needle]){
...
}
答案 1 :(得分:1)
看起来正确的方法是使用array_key_exists函数。
正如约翰和安德烈亚斯指出的那样,你正在寻找一个关键,而不是一个价值。 in_array
搜索数组值。
<?php
if(array_key_exists(438, $array)) { //found
echo "yes";
}else{
echo "no";
}
此处的文档:http://php.net/manual/en/function.array-key-exists.php
答案 2 :(得分:1)
函数in_array检查给定的针是否等于数组中的一个值,而不是数组中的一个键。
你基本上是这样做的:
if (438 == stdClass Object(
[w] => 438
[x] => 0
[y] => 438
[z] => 23
)
||
438 == stdClass Object(
[w] => 4960
[x] => 0
[y] => 4960
[z] => 37
)
) {
echo "yes";
}
else {
echo "no";
}
你应该使用的是:
$needle = 438;
if (array_key_exists($needle, $haystack)) {
echo 'yes';
}
else {
echo 'no';
}
答案 3 :(得分:0)
首先需要将haystack转换为多维数组
将stdClass对象转换为多维数组的函数
<?php
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
?>
你可以获得返回的数组,这将是完美的阵列准备搜索
function in_multiarray($elem, $array)
{
$top = sizeof($array) - 1;
$bottom = 0;
while($bottom <= $top)
{
if($array[$bottom] == $elem)
return true;
else
if(is_array($array[$bottom]))
if(in_multiarray($elem, ($array[$bottom])))
return true;
$bottom++;
}
return false;
}