我看到了很多答案,但我无法使它起作用。
我想检查数组中是否有(部分)值。
//Get DNS records
$result = dns_get_record("php.net", DNS_ALL);
print_r($result);
//If the value php-smtp3.php.net is found, echo it
if (in_array("php-smtp3.php.net", $result )) {
echo "Found!";
}
已添加:来自我的网络的json_encoded $ result
[
{
"host" : "php.net" ,
"class" : "IN" ,
"ttl" : 375 ,
"type" : "A" ,
"ip" : "208.43.231.9"
} ,
{
"host" : "php.net" ,
"class" : "IN" ,
"ttl" : 375 ,
"type" : "NS" ,
"target" : "dns2.easydns.net"
}
]
非常感谢大家,我想我快到了,对不起,如果我听不懂的话。这就是我现在拥有的:
$result = dns_get_record("php.net", DNS_ALL);
print_r($result);
$result = json_decode($result, true);
$result = array_filter($result, function($x) {
return in_array("smtp", $x, true);
//If in the array, no matter where, is "smtp" then echo "found" is what i am trying to achieve
echo "<h1>FOUND</h1>";
});
更新:
$result = dns_get_record("php.net", DNS_ALL);
$result = json_decode($data, true);
function process($data) {
foreach ($data as $key => $value) {
if (is_array($value)) {
return process($value);
}
if (is_string($value) && strpos($value,'smtp') !== false) {
echo "FOUND";
return true;
}
}
return false;
}
$result = array_filter($result, 'process');
我正在尝试两种方式...抱歉,我一直在尝试从DNS条目获取简单字符串的响应。背后的实际想法是:
1)检查域的DNS记录 2)检查是否有SPF记录 3)如果是这样,只需说“找到SPF记录”
$values = array_reduce(
dns_get_record("php.net", DNS_ALL),
function ($out, $item) {
return array_merge($out, array_values($item));
},
[]
);
var_dump(in_array("dns2.easydns.net", $values));
//Result is bool(true)
答案 0 :(得分:0)
使用json_decode后,您的数据将返回一个多维数组,其中某些数组还包含一个数组。
如果要检查部分值(如果字符串包含子字符串),可以使用strpos,但是必须循环遍历所有字符串,包括子数组。
因此,您可以结合使用array_filter和递归方法。
例如,如果要查找子字符串smtp3
,可以使用:
function process($data) {
foreach ($data as $key => $value) {
if (is_array($value)) {
return process($value);
}
if (is_string($value) && strpos($value,'smtp3') !== false) {
return true;
}
}
return false;
}
$result = array_filter($result, 'process');
print_r($result);
请参见php demo
答案 1 :(得分:0)
您需要做的就是将结果展平并搜索一个值,如下所示:
<?php
$values = array_reduce(
dns_get_record("php.net", DNS_ALL),
function ($out, $item) {
return array_merge($out, array_values($item));
},
[]
);
var_dump(in_array("dns2.easydns.net", $values));