使用in_array_r搜索会返回错误的结果

时间:2017-12-29 07:25:13

标签: php arrays recursion

我正在尝试使用递归multidimensional array函数在in_array中找到值,但我总是得到not found。 这是array $v

的结构
Array
(
    [0] => Array
        (
            [EV000005] => Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => EN
                                    [1] => Thread holding
                                )

                            [1] => Array
                                (
                                    [0] => nl-NL
                                    [1] => Schroefdraadhouder
                                )
                        )
                )
        )

这是功能:

public function in_array_r($needle, $haystack, $strict = false) {
            foreach ($haystack as $item) {
                if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && $this->in_array_r($needle, $item, $strict))) {
                    return true;
                }
            }
            return false;
        }

这就是我称之为函数的函数not found而不是found

echo $this->in_array_r("EV000005", $v) ? 'found' : 'not found';

我也尝试使用$strict = true但结果相同。 为什么在这种情况下搜索EV000005不成功?

3 个答案:

答案 0 :(得分:1)

来自link的参考。

您正在递归搜索值,但在示例中,您尝试按键搜索。

您可以使用此功能来实现此目的,

function array_key_exists_custom($needle, $haystack)
{
    $result = array_key_exists($needle, $haystack);
    if ($result) {
        return $result;
    }

    foreach ($haystack as $v) {
        if (is_array($v)) {
            $result = array_key_exists_custom($needle, $v);
        }
        if ($result) {
            return $result;
        }

    }
    return $result;
}

以下是demo

根据要求,这是面向对象的工作demo

这是你的代码:

<?php
//Enter your code here, enjoy!
class A
{

    public function array_key_exists_custom($needle, $haystack)
    {
        $result = array_key_exists($needle, $haystack);
        if ($result) {
            return $result;
        }

        foreach ($haystack as $v) {
            if (is_array($v)) {
                $result = $this->array_key_exists_custom($needle, $v);
            }
            if ($result) {
                return $result;
            }

        }
        return $result;
    }
    public function getData()
    {
        $arr = array
            (
            "0" => array
            (
                "EV000005" => array
                (
                    "0" => array
                    (
                        "0" => array
                        (
                            "0" => "EN",
                            "1" => "Thread holding",
                        ),

                        "1" => array
                        (
                            "0" => "nl-NL",
                            "1" => "Schroefdraadhouder",
                        ),
                    ),
                ),
            ),
        );
        $temp = $this->array_key_exists_custom("EV000005", $arr);
        echo ($temp ? "found" : "not found");
    }
}
$obj = new A;

$obj->getData();
?>

答案 1 :(得分:0)

试试这个,你的数组应该是:

Array
(
[0] => Array
    (
    ["EV000005"] => Array
        (
        [0] => Array
        (
            [0] => Array
                (
                [0] => "EN"
                [1] => "Thread holding"
                )

            [1] => Array
                (
                [0] => "nl-NL"
                [1] => "Schroefdraadhouder"
                )
        )
        )
    )
)

答案 2 :(得分:0)

in_array_r搜索值,但您正在查找密钥。 试试this gist