如何解决在多维数组PHP的所有键中搜索
| 我想在多维数组中的所有键中搜索特定的字符串。我只需要弄清楚它是否存在,仅此而已。我想知道在任何阵列中是否都存在访问者的IP。 有没有可用于执行此操作的php函数或方法,我尝试过的每一个总是返回false。 (in_array,array_search,array_filter) 我希望避免循环遍历每个键和一组值。 示例数组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
)
)
谢谢
解决方法
永远无法避免循环:-)
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*/}
,我可以想像一种方式,您不必循环(至少您自己):
$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,\'dtime\' => \'2011-04-28 17:57:05\',\'url_id\' => 12,23 => array
(
\'click_id\' => 23,\'dtime\' => \'2011-04-28 18:42:42\',\'url_id\' => 10,);
它会正确返回具有值109.148.183.1
的键(21
,22
和23
):
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\',$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
)
)
,$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\');
另外,您可以编写自己的递归函数,并避免使用全局函数。这只是最直接的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。