array_search_recursive()..帮我找到多维数组中存在的值

时间:2010-11-20 11:36:40

标签: php arrays multidimensional-array

以下函数很好地告诉我是否在数组中找到了值..

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

但是我想要数组中的值退出的数组索引号。

1 个答案:

答案 0 :(得分:0)

我已经通过添加引用传递的第三个参数来修改你的函数。

如果找到针,该函数将返回true。此外,$ indexes是找到的值的索引数组。

function array_search_recursive($needle, $haystack, &$indexes=array())
{
    foreach ($haystack as $key => $value) {
        if (is_array($value)) {
            $indexes[] = $key;
            $status = array_search_recursive($needle, $value, $indexes);
            if ($status) {
                return true;
            } else {
                $indexes = array();
            }
        } else if ($value == $needle) {
            $indexes[] = $key;
            return true;
        }
    }
    return false;
}

示例:

$haystack1 = array(
    0 => 'Sample 1',
    1 => 'Sample 2',
    2 => array(
        'Key' => 'Sample 3',
        1 => array(
            0 => 'Sample 4',
            1 => 'Sample 5'
        )
    ),
    4 => 'Sample 6',
    3 => array(
        0 => 'Sample 7'
        ),
);

“样本5”的索引是[2] [1] [1]。

if (array_search_recursive('Sample 5', $haystack1, $indexes)) {
/**
 * Output
 * Array
 * (
 *      [0] => 2
 *      [1] => 1
 *      [2] => 1
 * )
 */
    echo '<pre>';
    print_r ($indexes);
    echo '</pre>';
    die;
}