我有一个可以多层深度的数组,例如
'For Sale' => array(
'Baby & Kids Stuff' => array(
'Car Seats & Baby Carriers',
),
),
'For Rent' => array(
'Other' => array(
'Baby Clothes',
),
'Prices' => 'hhhhhh',
),
我要做的是搜索数组键和值以匹配字符串,到目前为止我已经提出了这个但是它没有工作......
// validate a category
public function isValid($category, $data = false) {
if(!$data) {
$data = $this->data;
}
foreach($data as $var => $val) {
if($var === $category) {
return true;
} elseif(is_array($val)) {
$this->isValid($category, $data[$var]);
} elseif($val === $category) {
return true;
}
}
}
我不知道自己做错了什么,非常感谢。
答案 0 :(得分:3)
} elseif (is_array($val)) {
return $this->isValid($category, $val);
^^^^^^
}
即使是递归呼叫,您也需要return
。
答案 1 :(得分:1)
如果您使用的是PHP> = 5.1.0,那么最好使用RecursiveArrayIterator
/ RecursiveIteratorIterator
$arr = array(
'For Sale' => array(
'Baby & Kids Stuff' => array(
'Car Seats & Baby Carriers',
),
),
'For Rent' => array(
'Other' => array(
'Baby Clothes',
),
'Prices' => 'hhhhhh',
),
);
function isValid($category, array $data)
{
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $key => $value) {
if (is_string($key) && ($category == $key)) {
return true;
}
if (is_string($value) && ($category == $value)) {
return true;
}
}
return false;
}
var_dump(isValid('Baby Clothes', $arr));
答案 2 :(得分:0)
//验证类别 公共函数isValid($ category,$ data = false){
if(!$data) {
$data = $this->data;
}
foreach($data as $var => $val) {
if($var === $category) {
return true;
} elseif(is_array($val)) {
return $this->isValid($category, $data[$var]);
} elseif($val === $category) {
return true;
}
}
return false;
}