搜索阵列DNS条目

时间:2018-12-16 12:25:25

标签: php arrays

我看到了很多答案,但我无法使它起作用。

我想检查数组中是否有(部分)值。

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

2 个答案:

答案 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));