「通知:定義されていないインデックス」のトラブルシューティングですが、インデックスが定義されているようです

私はこのコードを持っています:

<?php

$pattern = "/]*>(.*?)</";
$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 キーは定義されていましたが、なぜ定義されていないインデックスエラーが発生するのかわかりません。

1
ここにはもっと物語があるはずです。あなたのPHPファイル内の任意の面白い文字?配列にユニコードインデックスを使用していませんか?また、 $ key$ stations ["$ key"] = str_replace(... )で引用符で囲む必要はありません。
追加された 著者 Brad,
@ JaredFarrish、PointedEarsはそれを以下のように考え出した。トピーカスとあなたのために、ブラウザによってレンダリングされたエラーを私たちに与えないでください...それ以上のものがあり、それは隠されていて、ソースを見て明らかにしました。
追加された 著者 Brad,
@ブラッド - 私は自分のサイトでそのコードを実行すると、配列のすべてのキーについても同じエラーが発生します。
追加された 著者 Jared Farrish,
@ブラッド - "トピカスとあなたのために"これはどういう意味ですか?そのコメントはあなたの最初のコメントと関係していました。私がさらに問題を(コメントの後で)研究していたときに、PointedEarsは彼の答えを投稿しました(私はすでにアップしました)。だから私はあなたが「私たちにエラーを与えないでください」という意味を知らないし、あなたは私に話しているようだ。
追加された 著者 Jared Farrish,

2 答え

通知not :エラー)の HTMLソースコードを見てください。 PHP -a を使用してコンソールでコードを実行すると、次のように表示されます。

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
)
PHP Notice: Undefined index: retiro in - on line 19
PHP Stack trace:
PHP   1. {main}() -:0

正規表現を1回だけ適用してHTMLを解析しないでください。マークアップパーサーを使用します(効率を高めるために正規表現を使用する可能)。

あなたはそのデータを再利用する許可を持っていますか?

3
追加された
ああ!彼はプレーンテキストのエラーではなく、ブラウザでレンダリングされたバージョンを提供しました。よかった!
追加された 著者 Brad,
返信いただきありがとうございます!はい、それが問題でした。それは間違った方法でデータを解析していました。
追加された 著者 Topicus,

ステーションの配列をラップして配列に空のインデックスを入れないようにする必要があります。あなたのエラーはおそらく以前のprint_r()ステートメントによって引き起こされます:

print_r($ステーション);

新しい論理ラッピング:

if (!empty($key)) { $stations["$key"] = str_replace("Cant. Bicicletas disponibles: ","",substr($results[$i+1], 0, -1)); }

これは、配列内の空のインデックスを防ぐ必要があります。

1
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com