in_array和多维数组/对象的问题

时间:2011-08-10 03:26:38

标签: php arrays object

这是$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";
}

4 个答案:

答案 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;
        }
    }

?>

http://www.if-not-true-then-false.com/2009/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/

你可以获得返回的数组,这将是完美的阵列准备搜索

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;
}