2

これが些細な質問である場合は、お詫び申し上げます。検索しましたが、質問に対する答えが見つかりませんでしたので、投稿しています。私を助けてくれる人に前もって感謝し、あなたの時間をありがとう。私は、api(sanfrancisco.crimespotting.org)によって返された犯罪データの単純な解析を実行しようとしており、問題が発生しています。以下の非常に単純なコード。

<? 
$url = "http://sanfrancisco.crimespotting.org/crime-data?format=xml&count=5&dstart=2009-04-20";

$reports = new SimpleXMLElement($url, NULL, TRUE);

foreach ($reports-> report as $key => $value)
            {
            echo '<br />';
            echo '<b>Case #:</b> '.$reports -> report['case_number'];
            echo '<br />';
            echo '<b>Crime type</b> '.$reports -> report['crime_type'];
            echo '<br />';
            echo '<b>Date/Time:</b> '.$reports -> report['date_time'];
            echo '<br />';
            echo '<b>Date </b> '.$reports -> report['date'];
            echo '<br />';
            echo '<b>Time:</b> '.$reports -> report['time'];
            echo '<br />';
            echo '<b>More Info </b> '.$reports -> report['href'];
            echo '<br />';
            echo '<br />';
            echo '<br />';
            }
?>

ブラウザでURLをテストすると、APIから5つのレポートが返されます。5つのレポートタグが返されます。これが私のブラウザからの出力です。

            <reports>
            <report case_number="120220205" crime_type="Vehicle Theft" date_time="2012-07-17T23:10:00-07:00" date="Tuesday, Jul 17, 2012" time="11:10pm" lat="37.772441" lon="-122.412422" beat="" href="http://sanfrancisco.crimespotting.org/crime/2012-07-17/Vehicle_Theft/320858">STOLEN AUTOMOBILE</report>
            <report case_number="120560807" crime_type="Alcohol" date_time="2012-07-16T13:35:00-07:00" date="Monday, Jul 16, 2012" time="1:35pm" lat="37.783288" lon="-122.408954" beat="" href="http://sanfrancisco.crimespotting.org/crime/2012-07-16/Alcohol/334582">
            UNDER INFLUENCE OF ALCOHOL IN A PUBLIC PLACE (ARREST, BOOKED)
            </report>
            <report case_number="120559850" crime_type="Disturbing the Peace" date_time="2012-07-16T13:00:00-07:00" date="Monday, Jul 16, 2012" time="1:00pm" lat="37.778678" lon="-122.416545" beat="" href="http://sanfrancisco.crimespotting.org/crime/2012-07-16/Disturbing_The_Peace/334575">COMMITTING PUBLIC NUISANCE (ARREST, CITED)</report>
            <report case_number="120560653" crime_type="Theft" date_time="2012-07-16T12:35:00-07:00" date="Monday, Jul 16, 2012" time="12:35pm" lat="37.784644" lon="-122.414271" beat="" href="http://sanfrancisco.crimespotting.org/crime/2012-07-16/Theft/334580">PETTY THEFT SHOPLIFTING</report>
            <report case_number="120560700" crime_type="Theft" date_time="2012-07-16T12:00:00-07:00" date="Monday, Jul 16, 2012" time="12:00pm" lat="37.78966" lon="-122.400934" beat="" href="http://sanfrancisco.crimespotting.org/crime/2012-07-16/Theft/334581">GRAND THEFT BICYCLE</report>
            </reports>

ご覧のとおり(上記)、各レポートタグには異なるcase_number属性があります(例:120220205、120560807など)。ただし、ページをロードすると、これが受信する出力になります。

            Case #: 120220205
            Crime type Vehicle Theft
            Date/Time: 2012-07-17T23:10:00-07:00
            Date Tuesday, Jul 17, 2012
            Time: 11:10pm
            More Info http://sanfrancisco.crimespotting.org/crime/2012-07-17/Vehicle_Theft/320858



            Case #: 120220205
            Crime type Vehicle Theft
            Date/Time: 2012-07-17T23:10:00-07:00
            Date Tuesday, Jul 17, 2012
            Time: 11:10pm
            More Info http://sanfrancisco.crimespotting.org/crime/2012-07-17/Vehicle_Theft/320858



            Case #: 120220205
            Crime type Vehicle Theft
            Date/Time: 2012-07-17T23:10:00-07:00
            Date Tuesday, Jul 17, 2012
            Time: 11:10pm
            More Info http://sanfrancisco.crimespotting.org/crime/2012-07-17/Vehicle_Theft/320858



            Case #: 120220205
            Crime type Vehicle Theft
            Date/Time: 2012-07-17T23:10:00-07:00
            Date Tuesday, Jul 17, 2012
            Time: 11:10pm
            More Info http://sanfrancisco.crimespotting.org/crime/2012-07-17/Vehicle_Theft/320858



            Case #: 120220205
            Crime type Vehicle Theft
            Date/Time: 2012-07-17T23:10:00-07:00
            Date Tuesday, Jul 17, 2012
            Time: 11:10pm
            More Info http://sanfrancisco.crimespotting.org/crime/2012-07-17/Vehicle_Theft/320858

返された結果をループするためにforeachループを使用しているので、foreachループが自動的にインクリメントする必要があることを理解しているので、最初のケースが5回繰り返される理由がわかりません。

4

5 に答える 5

3

$reports -> reportループ内で置き換えるだけで機能し$valueます。

同じタグが複数ない場合は、単純化のために列挙可能で単純なオブジェクトとしてSimpleXMLElement使用できるようです。$reports->report

これがおそらく、これでエラーが発生しなかった理由です。

于 2012-08-04T00:17:44.850 に答える
3

foreachループ内でインクリメントされたデータを使用していません。代わりに、次のようなことをしたいとします。

foreach ($reports->report as $report)
{
    echo '<br />';
    echo '<b>Case #:</b> ' . $report['case_number'];
    // ...
}

コードでは、を繰り返し処理して$reports->reportいましたが、繰り返し値(および)$key => $valueを使用する代わりに、を呼び出していました。これは、ループが繰り返されても変更されません。$key$value$reports->report

于 2012-08-04T00:17:55.900 に答える
0

foreach構文が間違っています。$reports -> reportforeachブロックの内側を次のように置き換えてみてください$value

于 2012-08-04T00:17:31.723 に答える
0

ループ内で$keyも$valueも参照していません!あなたは常に$reports->report['case_number']を参照しています。これは常に同じです。

編集:私はあなたが$reportsを繰り返すべきだと言うのを忘れました。

于 2012-08-04T00:20:29.943 に答える
0

すぐに助けてくれたすべての人に感謝したいと思います。PHPドキュメントをさらに確認した後(具体的にはhttp://tinyurl.com/36a4aet)、$ reports(ルートタグとして)でchildren()メソッドを使用して、各レポートを取得する必要があることがわかりました。レポートタグは、attributes()メソッドを呼び出して、レポートの残りのデータを取得します。以下の新しいコードはトリックを行ったようです:)。

            foreach ($reports->children() as $node)
            {
                    $attribs = $node->attributes();
                    echo '<br />';
                    echo '<b>Case #:</b> '.$attribs["case_number"];
                    echo '<br />';
                    echo '<b>Crime type:</b> '.$attribs["crime_type"];
                    echo '<br />';
                    echo '<b>Date/Time:</b> '.$attribs["date_time"];
                    echo '<br />';
                    echo '<b>Date </b>: '.$attribs["date"];
                    echo '<br />';
                    echo '<b>Time:</b> '.$attribs["time"];
                    echo '<br />';
                    echo '<b>More Info: </b> <a href='.$attribs["href"].'>'.$attribs["href"].'</a>';
                    echo '<br />';
                    echo '<br />';
            }
于 2012-08-07T00:34:54.630 に答える