在多维数组 PHP 的所有键中搜索

2024-05-23

我想在多维数组中的所有键中搜索特定字符串。我只需要弄清楚它是否存在,仅此而已。我想知道访问者的 IP 是否存在于任何数组中。

有没有我可以用来执行此操作的 php 函数或方法,我尝试过的每个函数或方法总是返回 false。 (数组中、数组搜索、数组过滤器)

我希望避免循环遍历每个键和值集。

数组示例

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
        )
)

Thanks


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

$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,
    ),
);

它正确返回键(21, 22 and 23)具有价值109.148.183.1:

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
        )
)

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

$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
        )
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多维数组 PHP 的所有键中搜索 的相关文章