1

当使用此代码从http://www.ea.com/uk/football/profile/Calfreezy/360获取数据时,代码只是回显“数组”一词

这是我目前使用的代码:

<?php

$content = file_get_contents("http://www.ea.com/uk/football/profile/Calfreezy/360");

preg_match('#<div class="stat">Titles Won<span>([0-9\.]*)<span class="sprite13 goalImage cup"></span></span>#', $content, $titleswon);

echo 'Titles Won: '.$titleswon.'';

?>

这是我试图从 url 中提取的 HTML:

<div class="stat">
                Titles Won                <span>0<span class="sprite13 goalImage cup"></span></span>
            </div>

这只是返回 Titles won: Array

如果工作它应该返回 Titles won: 0

我做错了什么,谢谢。

4

6 回答 6

2

您正在打印整个匹配数组,而不是从中选择所需的索引并打印它们。

请参阅文档

如果提供了匹配项,则将其填充为搜索结果。$matches[0]将包含与完整模式匹配的$matches[1]文本,将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

于 2013-04-25T15:55:46.013 回答
2

preg_match() 产生一个匹配数组。如果你在字符串上下文中打印出一个数组,你会得到Array文本。例如

$arr = array('foo' => 'bar');

echo $arr; // prints "Array"
echo $arr['foo']; // prints "bar"
于 2013-04-25T15:55:53.553 回答
1

preg_match从文档中可以看出,返回一个数组。

如果您想查看数组的所有内容,请使用

var_dump( $titleswon );

如果您只需要匹配的,则必须解决该特定部分。

于 2013-04-25T15:56:12.083 回答
0

第三个参数 preg_match 通过引用传递,并将包含一个数组,每个捕获组中都有匹配项。您正在使用两个“组”。整场比赛,([0-9\.]*)这将是第二场。所以我希望你需要这个:

echo 'Titles Won: '.$titleswon[1].''; // note the array is indexed by 0
于 2013-04-25T15:56:05.647 回答
0

最好的方法是:

if (preg_match('#<div class="stat">Titles Won<span>([0-9\.]*)<span class="sprite13 goalImage cup"></span></span>#', $content, $titleswon)) {
   echo 'Titles Won: '.$titleswon[1].'';
}
于 2013-04-25T15:54:31.603 回答
0

如果您查看 preg_match 文档: http: //php.net/manual/en/function.preg-match.php

可以看到,$match 参数中实际上是一个数组,$match[0] 包含整个匹配项,而连续的数组元素包含子查询。

如果您这样做,var_dump($titleswon)或者print_r($titleswon)您将看到全部信息,那么您可以访问所需的信息,在您的情况下,它将是$titleswon[1]

于 2013-04-25T15:56:49.130 回答