【问题标题】:Printing multiple websites arrays打印多个网站数组
【发布时间】:2015-05-08 05:52:12
【问题描述】:

不幸的是,经过研究,我仍然找不到问题的答案。 问题是我无法从多页打印数据。数据只打印一次。也许我在这里错过了愚蠢的错误,你可以帮我找到它。

$cycles=10;
$listValue=0;


for ($cy = 0; $cy < $cycles; $cy++){

$html = file_get_contents("http://www.website.com/rate/today.aspx?d=02.03.2015&r=". $listValue ."01&c=#");

$dom = new DOMDocument;

@$dom->loadHTML($html);


$tables = $dom->getElementsByTagName('td');
$data = array();


while($table = $tables->item($i++))
{
    //stuff
}

foreach($data as $item) 
{
    echo "Rank - " . $item['rank'] . "</br>";

}

$listValue++;
echo $listValue."<br>";
}

所以基本上,我只能打印第一页的数据。

【问题讨论】:

  • 这是出现问题的最少代码吗?如果没有,你能做到吗?除了是一个很好的自我调试技能外,它还可以让其他人在不必查看多个部分的情况下更容易找到问题。请参阅about the MCVE 了解更多信息。
  • 尝试 curl 并将您的脚本呈现为 Web 浏览器。但在你做那个检查之前是否有 JSON 提要或其他东西......

标签: php curl copy nodes


【解决方案1】:

在第一个循环之前声明集合变量$whatWasCollected = "";

在第一个循环结束时将收集到的数据分配给一个变量,每次都附加到该变量。

$whatWasCollected .= "This is what I want to print..."

摆脱最后一个循环,只回显完整的字符串。

echo $whatWasCollected;

只是一个建议。试一试,让我知道它对我来说是否可行且有趣。

【讨论】:

  • 尽量简化整个过程就是我所说的。当我再次查看您的代码时,我可以看到您的最后一个循环很好。我会说尝试对其进行编码,以便应用程序构建它应该在内存中打印的内容并在循环结束时打印,而不是尝试多次运行打印函数。所以我在回答中使用的示例将引用您的最后一个循环并在所有循环结束时回显您想要的内容
  • 是的,我明白你的意思。我试图这样做,但我得到的结果是同一个列表只有多次。不知何故,仅从第一个 $url 获取数据。仍在努力解决这个问题
  • 您是否尝试将所有页面堆叠在一个$dom = new DOMDocument; 中。尝试在循环开始之前声明 DOM
  • 明白了!你是对的,我在一个 $dom 页面中收集了所有 html,并且只是在开始我的循环之后。也许这不是最好的方法,但是 - 它对我有用。谢谢你
  • 很高兴为您提供帮助。它是一个快速而肮脏的解决方案。当然总有更好的方法。特别是为了节省应用程序内存,但这种方式只会为您的工作日增加一到两秒
猜你喜欢
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2013-03-25
  • 2020-09-27
相关资源
最近更新 更多