php - 检测空的子数组-无效的foreach

标签 php arrays error-handling is-empty dns-get-record

我正在尝试获取NS和A记录以获取表中包含的域的列表。

我开始写这个:

$domains = GetDomainsForDNS();

foreach ($domains as $domain){
  $domain_id = $domain[0];
  $domain = $domain[1];
  $dns_records = dns_get_record($domain, DNS_NS + DNS_A);

  echo $domain;
  foreach($dns_records as $dns_record){
    if (!$dns_record){
      //var_dump($dns_record);
      echo "empty";
    }
  }
}

$ domains是我要检查的表的ID和域。

我收到的警告是:

Warning: Invalid argument supplied for foreach() for the later foreach





Warning: dns_get_record(): DNS Query failed for dns_get_record



从外观上看,当dns_get_record()找不到任何内容时,我会收到这些错误。

我试图将这些域标记为数据库中存在问题,因此我需要一种检测它们的方法。我已经尝试过empty()和其他方法来检测它们,但是我所做的一切都带来了上面的php警告。

这是因为它是多维数组吗?我要如何正确地做到这一点。

谢谢

最佳答案

由于未指定源数组的格式,我猜想它将与下面显示的数组类似-似乎可以正常工作,并且很快返回dns记录以供以后处理

function GetDomainsForDNS(){
    /* example dummy data */
    return array(
        array(1,'stackoverflow.com'),
        array(2,'google.com'),
        array(3,'microsoft.com'),
        array(4,'yellow-banana.com'),
        array(5,'yahoo.com'),
        array(6,'blue-velvet-caulifower.org')
    );
}


$domains = GetDomainsForDNS();
$dns = array();


foreach( $domains as $arr ){
    try{
        $id = $arr[0];
        $domain = $arr[1];

        /* suppress potential errors */
        $records = @dns_get_record( $domain, DNS_NS + DNS_A );

        /* If the query failed, throw a catchable exception */
        if( empty( $records ) ) throw new Exception( sprintf( 'DNS Query failed for %s', $domain ) );

        /* add records to output array or later use */
        $dns[ $domain ]=$records;

    }catch( Exception $e){
        /* display warnings */
        printf( '%s<br />', $e->getMessage() );
        /* move to the next domain to check */
        continue;
    }
}

printf( '<pre>%s</pre>',print_r( $dns, true ) );

其输出将类似于
DNS Query failed for yellow-banana.com
DNS Query failed for blue-velvet-caulifower.org
Array
(
    [stackoverflow.com] => Array
        (
            [0] => Array
                (
                    [host] => stackoverflow.com
                    [type] => A
                    [ip] => 151.101.193.69
                    [class] => IN
                    [ttl] => 1
                )
                ............ etc

关于php - 检测空的子数组-无效的foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49281938/

相关文章:

php - 需要帮助格式化返回的 SQL 数据

php - 通过 HTTPHeaderField 传递值时出现有趣的问题

javascript - 从数组中删除部分

c# - C# try catch 并返回提示

FTP 挂起/421 超时的 Python 错误处理

php - 如何在购物车页面 "WooCommerce"中显示航运等级的零费率值

javascript - 为什么我的网站认为 $http 请求是跨域的?

php - codeigniter 从字符串修改数组以进行 insert_batch

java - 使用无参数构造函数添加到数组

c# - 多个线程调用同一函数不起作用