Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我的赛前成绩会翻倍?_Php - Fatal编程技术网

Php 为什么我的赛前成绩会翻倍?

Php 为什么我的赛前成绩会翻倍?,php,Php,慢慢地,但肯定的是,我正在组装一个供个人使用的网站,在那里我搜索一部电影的名字,它会返回它的元批评评级。以下是我目前得到的信息: $web = file_get_contents("http://www.metacritic.com/movie/the-lion-king"); preg_match( '/<span class="score_value" property="v:average">(.*?)<\/span>/s', $web,

慢慢地,但肯定的是,我正在组装一个供个人使用的网站,在那里我搜索一部电影的名字,它会返回它的元批评评级。以下是我目前得到的信息:

$web = file_get_contents("http://www.metacritic.com/movie/the-lion-king"); 

preg_match(
    '/<span class="score_value" property="v:average">(.*?)<\/span>/s',
    $web,
    $match
 );

foreach ($match as $score) {
    $sc = $score;
    echo $sc;
}
它应该只返回83,而不是8383

我指出了元批评评级的位置,因为我需要获取这些信息。我不确定它是否正确?可能是一些非常粗糙的工作,我不太了解preg_match,网上的文档一点帮助都没有


有人能帮我吗?

您应该只回显
$score[1]
,因为这是您第一个捕获的带括号的子模式的位置


阅读文档以确定是否在匹配项上使用“打印”,但我认为它正在将括号中的后参考值打印为第二个值,以供参考:

array(2) {
  [0]=>
  string(56) "<span class="score_value" property="v:average">83</span>"
  [1]=>
  string(2) "83"
}
数组(2){
[0]=>
字符串(56)“83”
[1]=>
字符串(2)“83”
}
内容如下:


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

Gosh,所以正则表达式无法解析html?谢谢你,克里斯!因为你是新来的,所以我会给你一个友好的建议。你应该选择下面的答案来接受。我要推荐克里斯特的答案,因为这个答案在我之前就已经发布了,而且同样有效。谢谢你的建议,蒂姆,我确实接受了他的答案。我以前不能做,因为有一个计时器,愚蠢的计时器。所以我错了,我做了一个不必要的循环,不是吗?我很惭愧。谢谢你,克里斯特!!这就是为什么我的循环要加倍。我不明白[0]怎么只显示了83,它不应该显示整个
“83”
?它显示了。但跨度在输出中是不可见的。:)如果您查看源代码,它会显示出来。
array(2) {
  [0]=>
  string(56) "<span class="score_value" property="v:average">83</span>"
  [1]=>
  string(2) "83"
}