doudang4857 2013-03-15 15:49
浏览 27
已采纳

在PHP中递归搜索数组以获得密钥匹配或值匹配?

I have an array that can be many levels deep for example

'For Sale' => array(
        'Baby & Kids Stuff' => array(
            'Car Seats & Baby Carriers',
                            ),
        ),
'For Rent' => array(
        'Other' => array(
            'Baby Clothes',
        ),
         'Prices' => 'hhhhhh',
                   ),

What I am trying to do is search both the array keys and values to match a string, I have come up with this so far but it isn't working...

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

I don't know what I am doing wrong, many thanks.

  • 写回答

3条回答 默认 最新

  • dpg98445 2013-03-15 16:16
    关注

    if you're using PHP >= 5.1.0 than it's better to use 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条)

报告相同问题?

悬赏问题

  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题