0

たとえば、多くのレベルの深さになる可能性のある配列があります

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

何が間違っているのかわかりません、どうもありがとう。

4

3 に答える 3

3
} elseif (is_array($val)) {
    return $this->isValid($category, $val);
    ^^^^^^
}

return再帰呼び出しからもする必要があります。

于 2013-03-15T15:51:30.737 に答える
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));
于 2013-03-15T16:16:14.287 に答える
0

// カテゴリを検証 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)) {
        return $this->isValid($category, $data[$var]);
    } elseif($val === $category) {
        return true;
    }
}
return false;
} 
于 2013-03-15T15:52:14.730 に答える