我创建了一个类来查找数组中特定键的位置/级别。我实际上是在尝试创建一个函数但是我最终创建了一个完整的类,因为我必须跟踪我的计数器。虽然这个类工作得很好,但我真的需要使用一个函数来完成它。
请您帮我解决一下这个问题,这样我才能使用功能/功能达到相同的效果。
这是我的课程代码:
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"
);
答案 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--;
}
}
}