Foreach循环未按预期传递所有值

时间:2013-02-13 15:28:42

标签: php

我正在尝试遍历由文本文件收集的IP地址组成的数组。最终目标是检索每个IP的主机名。我的问题是我只从阵列中的最后一个IP获得结果。我认为这很简单,但我显然遗漏了一些东西。

<?php
$thefile = 'myfile';
$arr = file($thefile.".txt");

foreach ($arr as $data) {
echo $hostname = gethostbyaddr($data);" <br>";
?>

文本文件包含几个我知道有关联名称的IP,但是我得到了

“警告:gethostbyaddr()[function.gethostbyaddr]:地址不是...中的有效IPv4或IPv6地址”  对于每个实例,但最后一个,返回正确的结果。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

<?php

$thefile = 'myfile';
$arr = file($thefile . '.txt',FILE_SKIP_EMPTY_LINES);

foreach ($arr as $data) 
{
    $hostname = gethostbyaddr(trim($data));
    echo $hostname . "<br>";
}

?>

您可能有换行符或某些空格,因此请在传递给函数之前使用trim()删除它们。

答案 1 :(得分:0)

假设您的输入文件正常,如下所示:

    100.100.100.100
    100.100.100.101
    100.100.100.102

根据file的PHP手册:“返回数组中的文件。数组的每个元素对应文件中的一行,仍然附加换行符。” / p>

你需要删除这些换行符,使用trim应该这样做。