我有这段代码:
<?php
$pattern = "/<span\b[^>]*>(.*?)</";
$html = file_get_contents("http://www.bicicletapublica.com.ar/mapa.aspx");
$results = array();
preg_match_all($pattern, $html, $results );
$results = $results[0];
$stations = array();
for($i = 0; $i < count($results)-1;$i++){
if(!($i & 1)){
$key = strtolower(str_replace(" ","_",substr($results[$i], 0, -1)));
$stations["$key"] = str_replace("Cant. Bicicletas disponibles: ","",substr($results[$i+1], 0, -1));
}
}
print_r($stations);
print_r($stations["retiro"])
?>
我收到了这个错误:
Array ( [retiro] => 40 [aduana] => 26 [derecho] => 27 [plaza_roma] => 8 [plaza_italia] => 29 [parque_lezama] => 31 [obelisco] => 28 [congreso] => 7 [parque_las_heras] => 17 [uca_puerto_madero] => 27 [tribunales] => 25 [plaza_vicente_lopez] => 23 [once] => 27 [pacifico] => 19 [virrey_cevallos] => 26 [plaza_houssay] => 2 [plaza_de_mayo] => 6 [plaza_almagro] => 21 [cmd] => 7 [independencia] => 9 [plaza_san_martin] => 21 )
Notice: Undefined index: retiro in /opt/lampp/htdocs/mejorenbici/index.php on line 17
如您所见,键retiro
已定义,但我不明白为什么会触发未定义的索引错误。
答案 0 :(得分:3)
查看通知的 HTML源代码(不:错误)。使用php -a
在控制台中运行代码时,我得到了:
Array (
[<span_class="style1">retiro] => <span class="style2">40
[<span_class="style1">aduana] => <span class="style2">26
[<span_class="style1">derecho] => <span class="style2">27
[<span_class="style1">plaza_roma] => <span class="style2">8
[<span_class="style1">plaza_italia] => <span class="style2">29
[<span_class="style1">parque_lezama] => <span class="style2">31
[<span_class="style1">obelisco] => <span class="style2">28
[<span_class="style1">congreso] => <span class="style2">7
[<span_class="style1">parque_las_heras] => <span class="style2">17
[<span_class="style1">uca_puerto_madero] => <span class="style2">27
[<span_class="style1">tribunales] => <span class="style2">25
[<span_class="style1">plaza_vicente_lopez] => <span class="style2">23
[<span_class="style1">once] => <span class="style2">27
[<span_class="style1">pacifico] => <span class="style2">19
[<span_class="style1">virrey_cevallos] => <span class="style2">26
[<span_class="style1">plaza_houssay] => <span class="style2">2
[<span_class="style1">plaza_de_mayo] => <span class="style2">6
[<span_class="style1">plaza_almagro] => <span class="style2">21
[<span_class="style1">cmd] => <span class="style2">7
[<span_class="style1">independencia] => <span class="style2">9
[<span_class="style1">plaza_san_martin] => <span class="style2">21
)
PHP Notice: Undefined index: retiro in - on line 19
PHP Stack trace:
PHP 1. {main}() -:0
不要只通过一次应用一个正则表达式来解析HTML;使用标记解析器(可以使用正则表达式以提高效率)。
您是否有权重复使用该数据?
答案 1 :(得分:1)
你应该包装station数组,以确保你没有在数组中输入空索引。您的错误可能是由之前的print_r()语句引起的:
的print_r($站);
新的逻辑包装:
if (!empty($key)) { $stations["$key"] = str_replace("Cant. Bicicletas disponibles: ","",substr($results[$i+1], 0, -1)); }
这应该可以防止数组中的空索引。