检测空子数组 - foreach 无效
detecting empty child arrays - invalid foreach
我正在尝试获取我在 table.
中的域列表的 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 是我要检查的 table 中的 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 警告。
这是因为它是一个多维数组吗?我该如何正确执行此操作。
谢谢
我认为,虽然不知道测试域,但您得到的 return 值为 false
//check returned values not falsey
if ($dns_records) {
// as the returned value is not false
foreach ($dns_records as $dns_record) {
// $dns_record is an associative array.
}
}
由于未指定源数组的格式,我猜它会类似于下面显示的数组 - 似乎工作正常并且速度很快 returns dns 记录供以后处理
function GetDomainsForDNS(){
/* example dummy data */
return array(
array(1,'whosebug.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
(
[whosebug.com] => Array
(
[0] => Array
(
[host] => whosebug.com
[type] => A
[ip] => 151.101.193.69
[class] => IN
[ttl] => 1
)
............ etc
我正在尝试获取我在 table.
中的域列表的 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 是我要检查的 table 中的 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 警告。
这是因为它是一个多维数组吗?我该如何正确执行此操作。
谢谢
我认为,虽然不知道测试域,但您得到的 return 值为 false
//check returned values not falsey
if ($dns_records) {
// as the returned value is not false
foreach ($dns_records as $dns_record) {
// $dns_record is an associative array.
}
}
由于未指定源数组的格式,我猜它会类似于下面显示的数组 - 似乎工作正常并且速度很快 returns dns 记录供以后处理
function GetDomainsForDNS(){
/* example dummy data */
return array(
array(1,'whosebug.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
(
[whosebug.com] => Array
(
[0] => Array
(
[host] => whosebug.com
[type] => A
[ip] => 151.101.193.69
[class] => IN
[ttl] => 1
)
............ etc