Php 在多维数组中搜索所有键

Php 在多维数组中搜索所有键,php,arrays,search,multidimensional-array,Php,Arrays,Search,Multidimensional Array,我想在多维数组中搜索所有键以查找特定字符串。我只是想知道它是否存在,没别的了。我想知道在任何阵列中是否存在访问者的IP 是否有一个php函数或方法可以用来实现这一点,我尝试过的每个函数或方法都会返回false。(在数组中,数组搜索,数组过滤器) 我希望避免循环遍历每个键和一组值 示例数组 谢谢永远无法避免循环:-) 或者,您可以编写自己的递归函数,避免使用全局函数。这是最直接的方法。我可以想象一种你不必循环的方法(至少你自己): 它正确返回值为109.148.183.1的键(21、22和23):

我想在多维数组中搜索所有键以查找特定字符串。我只是想知道它是否存在,没别的了。我想知道在任何阵列中是否存在访问者的IP

是否有一个php函数或方法可以用来实现这一点,我尝试过的每个函数或方法都会返回false。(在数组中,数组搜索,数组过滤器)

我希望避免循环遍历每个键和一组值

示例数组


谢谢

永远无法避免循环:-)


或者,您可以编写自己的递归函数,避免使用全局函数。这是最直接的方法。

我可以想象一种你不必循环的方法(至少你自己):

它正确返回值为
109.148.183.1
的键(
21
22
23
):

$term = '2011-04-28 [0-9]{2}:[0-9]{2}:[0-9][13579]';
$result = array_map('unserialize', preg_filter('~' . $term . '~', '$0', array_map('serialize', $data)));

echo '<pre>';
print_r($result);
echo '</pre>';

由于这是一个正则表达式,我们可以进行更强大的搜索,例如搜索所有秒数为奇数的
2011-04-28
日期:

function search($array, $searchString){
   foreach($array as $key=>$val){
        if(in_array($searchString, $val)) return true;
   }
   return false;
}

//use it like so:
if(search($array, '109.148.183.1')){/*do something*/}
$matching_keys = array();

function search ($item, $key) {
  global $matching_keys();
  // do your testing here, stuff matches in $matching_keys, or however you wanna do it
}
array_walk_recursive($array, 'search');
$term = preg_quote('109.148.183.1', '~'); // lets make sure it's safe
$result = array_map('unserialize', preg_filter('~' . $term . '~', '$0', array_map('serialize', $data)));

echo '<pre>';
print_r($result);
echo '</pre>';
$data = array
(
    21 => array
    (
        'click_id' => 21,
        'ip_addr' => '109.148.183.1',
        'dtime' => '2011-04-28 17:56:57',
        'url_id' => 11,
    ),

    22 => array
    (
        'click_id' => 22,
        'ip_addr' => '109.148.183.1',
        'dtime' => '2011-04-28 17:57:05',
        'url_id' => 12,
    ),

    23 => array
    (
        'click_id' => 23,
        'ip_addr' => '109.148.183.1',
        'dtime' => '2011-04-28 18:42:42',
        'url_id' => 10,
    ),
);
Array
(
    [21] => Array
        (
            [click_id] => 21
            [ip_addr] => 109.148.183.1
            [dtime] => 2011-04-28 17:56:57
            [url_id] => 11
        )

    [22] => Array
        (
            [click_id] => 22
            [ip_addr] => 109.148.183.1
            [dtime] => 2011-04-28 17:57:05
            [url_id] => 12
        )

    [23] => Array
        (
            [click_id] => 23
            [ip_addr] => 109.148.183.1
            [dtime] => 2011-04-28 18:42:42
            [url_id] => 10
        )
)
$term = '2011-04-28 [0-9]{2}:[0-9]{2}:[0-9][13579]';
$result = array_map('unserialize', preg_filter('~' . $term . '~', '$0', array_map('serialize', $data)));

echo '<pre>';
print_r($result);
echo '</pre>';
Array
(
    [21] => Array
        (
            [click_id] => 21
            [ip_addr] => 109.148.183.1
            [dtime] => 2011-04-28 17:56:57
            [url_id] => 11
        )

    [22] => Array
        (
            [click_id] => 22
            [ip_addr] => 109.148.183.1
            [dtime] => 2011-04-28 17:57:05
            [url_id] => 12
        )
)