doubengshao8872 2014-08-21 13:22
浏览 66
已采纳

PHP:通用递归数组搜索[重复]

This question already has an answer here:

I try to find a value in an array, no matter how deep that array is or what "structure" it may have. But my approach doesn't find all values. I think I get the recursion wrong, but I don't know.

$haystack = array(
        'A',
        'B' => array('BA'),
        'C' => array('CA' => array('CAA')),
        'D' => array('DA' => array('DAA' => array('DAAA')))
    );

function array_find($needle, array $haystack) {
    foreach ($haystack as $value) {
        if (is_array($value)) {
            if (in_array($needle, $value)) {
                return true;
            } else {
                return array_find($needle, $value);
            }
        } else {
            if ($value == $needle) {
                return true;
            }
        }
    }
    return false;
}

$find = array('A', 'BA', 'CAA', 'DAAA');

foreach($find as $needle) {
    if (array_find($needle, $haystack)) {
        echo $needle, " found".PHP_EOL;
    } else {
        echo $needle, " not found".PHP_EOL;
    }
}
</div>
  • 写回答

2条回答 默认 最新

  • douna1895 2014-08-21 13:27
    关注

    Simply change your code to:

    function array_find($needle, array $haystack) {
        foreach ($haystack as $value) {
            if (is_array($value)) {
                if (in_array($needle, $value)) {
                    return true;
                } else {
                    if (array_find($needle, $value)) {
                        return true;
                    }
                }
            } else {
                if ($value == $needle) {
                    return true;
                }
            }
        }   
        return false;
    }
    

    The problem is in your return statement.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法