找出数组中特定键的位置

时间:2013-12-25 03:33:36

标签: php arrays multidimensional-array

我创建了一个类来查找数组中特定键的位置/级别。我实际上是在尝试创建一个函数但是我最终创建了一个完整的类,因为我必须跟踪我的计数器。虽然这个类工作得很好,但我真的需要使用一个函数来完成它。

请您帮我解决一下这个问题,这样我才能使用功能/功能达到相同的效果。

这是我的课程代码:

class Boom {

private $count = 0; 

    function get_depth($array, $keyValue)
    {   

        foreach ($array as $key=>$value) {

            if($key==$keyValue)
            {   

                return $this->count;


            }
            elseif(is_array($value))
            {
                $this->count++;                 
                echo $this->get_depth($value,$keyValue);
                $this->count--;
            }

        }


    }

}

要使用此课程:

$obj = new Boom();  
echo $obj->get_depth($array, 'your_key'); // 'your_key' example: 'Refrigerator'

您可以使用如下数组:

$asset = array(

'Electronics' => array(
                "TV"=>array("TV1"=>500,"TV2"=>2500),
                "Refrigerator"=>200,
                "Washing Machine"=>array("WM1"=>array("b1"=>array("b11"=>80,"b22"=>10),"WM12"=>10),"WM2"=>5500),
                "Savings Accounts"=>200,
                "Money Market Accounts"=>200,
                 ),
'Sports'=> array(
                "Cricket"=>array("CBat"=>500,"CBall"=>2500),
                "Tennis"=>900,
                "Football"=>array("FBall"=>1500,"FJersy"=>5500),

                ),
'Random' =>"0"                                  
);

1 个答案:

答案 0 :(得分:1)

简单。只需在每次递归调用时传入密钥:

function get_depth($array, $keyValue, $count = 0)
{
    foreach ($array as $key=>$value) {
        if ($key==$keyValue) {
            return $count;
        } elseif (is_array($value)) {
            $count++;                 
            echo get_depth($value, $keyValue, $count);
            $count--;
        }
    }
}

注意:我还没有验证代码的功能,我只是以一种不需要类存储变量的方式复制了您的确切代码。

另一种方法可能是使用静态变量(也未测试),但我建议使用上面的第一种方法:

function get_depth($array, $keyValue)
{
    static $count = 0;

    foreach ($array as $key=>$value) {
        if ($key==$keyValue) {
            return $count;
        } elseif (is_array($value)) {
            $count++;
            echo get_depth($value, $keyValue);
            $count--;
        }
    }
}