我有一个如下所示的数组:
Array (
[0] => Array (
[host] => google.com
[type] => NS
[target] => ns2.google.com
[class] => IN [ttl] => 112756
)
[1] => Array (
[host] => google.com
[type] => NS
[target] => ns1.google.com
[class] => IN
[ttl] => 112756
)
[2] => Array (
[host] => google.com
[type] => NS
[target] => ns3.google.com
[class] => IN
[ttl] => 112756
)
[3] => Array (
[host] => google.com
[type] => NS
[target] => ns4.google.com
[class] => IN
[ttl] => 112756
)
)
我想搜索模式*google*
。不确定用于执行此操作的功能。 in_array似乎不喜欢正则表达式或搜索多个数组。
答案 0 :(得分:1)
我会使用preg_grep:
答案 1 :(得分:0)
您可以使用array_map函数,该函数将回调(函数名称,方法名称作为对象数组和方法名称,或lambda)映射到数组中的每个元素。
如果你想要我详细说明,请问。 :)
答案 2 :(得分:0)
我会循环并使用strpos()
以下是来自php.net的说明,可以在preg_match() page.
找到如果您只是使用preg_match() 想检查是否有一个字符串 包含在另一个字符串中使用 strpos()或strstr()代替它们 会更快。
答案 3 :(得分:0)
array_map和preg_match
$example_array[] = array(
'host' => 'google.com',
'type' => 'NS',
'target' => 'ns2.google.com',
'class' => 'IN',
'ttl' => 112756
);
$example_array[] = array(
'host' => 'google.com',
'type' => 'NS',
'target' => 'ns1.google.com',
'class' => 'IN',
'ttl' => 112756
);
$example_array[] = array(
'host' => 'yahoo.com',
'type' => 'NS',
'target' => 'ns1.yahoo.com',
'class' => 'IN',
'ttl' => 112756
);
如果在$ example_array上执行print_r(),这就是数组结构的样子:
echo print_r($example_array,true)."\n";
输出:
Array
(
[0] => Array
(
[host] => google.com
[type] => NS
[target] => ns2.google.com
[class] => IN
[ttl] => 112756
)
[1] => Array
(
[host] => google.com
[type] => NS
[target] => ns1.google.com
[class] => IN
[ttl] => 112756
)
[2] => Array
(
[host] => yahoo.com
[type] => NS
[target] => ns1.yahoo.com
[class] => IN
[ttl] => 112756
)
)
功能
function look4($haystack, $needle = 'google') {
return preg_match("/$needle/i", $haystack);
}
// instead of $example_array use your array here
foreach($example_array as $sub_array) {
$results = array_map("look4", $sub_array);
print_r($results);
}
结果(0(零)的值是错误匹配,值1(一)是真匹配):
Array
(
[host] => 1
[type] => 0
[target] => 1
[class] => 0
[ttl] => 0
)
Array
(
[host] => 1
[type] => 0
[target] => 1
[class] => 0
[ttl] => 0
)
Array
(
[host] => 0
[type] => 0
[target] => 0
[class] => 0
[ttl] => 0
)
答案 4 :(得分:0)
$filtered = array_filter($array, function ($value) { return strpos($value['host'], 'google') !== false; });
$filtered
将包含host
包含"google"
的所有条目。需要PHP 5.3。如果您对任何字段感兴趣,而不仅仅是preg_grep
,则可以使用strpos
而不是host
,如@Aaron Ray所建议的那样。
array_walk_recursive($array, function ($value) { return strpos($value, 'google') !== false; });
根据是否包含搜索字词,这会将所有值替换为true
或false
。虽然不确定你用的是什么......:)
$termExists = array_reduce($array, function ($found, $value) {
return $found || preg_grep('/google/', $value);
});
这将返回一个布尔值,无论该值是否存在于整个数组中。
答案 5 :(得分:0)
我认为我使用serialize()
找到了一种更简单的方式。
$mymultiarrays = serialize($mymultiarrays);
echo preg_match( '/google/', $mymultiarrays;