итерация взорванных значений - PullRequest
1 голос
/ 06 марта 2012

Я не могу повторить разнесенные значения lat и lng. Продолжает возвращать только одну пару (x, y) значений в базе данных.

Пожалуйста, смотрите код ниже:

<?php
$feed = file_get_contents("http://api.geograph.org.uk/syndicator.php?key=hfALmNnpQ&i=14102530&page=1&format=media&expand=1&perpage=100");
$xml = new SimpleXmlElement($feed);
foreach ($xml->item as $entry){
echo $entry->title;
echo $entry->description;
echo $entry->link;

// use that namespace
$dc = $entry->children('http://purl.org/dc/elements/1.1/');
$georss = $entry->children('http://www.georss.org/georss');
echo $entry->children('http://purl.org/dc/elements/1.1/')->creator;
echo $entry->children('http://www.georss.org/georss')->point
list($lat,$lng) = explode(' ', $entry->children('http://www.georss.org/georss')->point);
}
?>

В приведенном ниже коде показаны операции с базой данных:

<?php
require 'table.php';

// Opens a connection to a PostgresSQL server
$connection = pg_connect("dbname=postgis user=postgres password=****");


// Execute query        

foreach ($xml->item as $entry) { 

$query = "INSERT INTO geognew(title, link, author, latitude, longitude) VALUES ('" . $entry->title . "', '" . $entry->link . "', '" . $entry->children('http://purl.org/dc/elements/1.1/')->creator . "', '" . $lat . "', '" . $lng . "')";

$result = pg_query($query);
printf ("These values are inserted into the database - %s %s %s", $entry->title, $entry->link, $entry->children('http://purl.org/dc/elements/1.1/')->creator, $lat, $lng);
}

pg_close();

?>

Спасибо Yemi

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

Лучше сохранить широту / долготу в массиве.Потому что итерация xml снова и снова является излишним.

// define this $points outside the foreach loop
$points = array();

foreach(...){
....
    list($lat,$lng) = explode(' '
           , (string)($entry->children('http://www.georss.org/georss')->point));
    $points[] = array('lat'=> $lat, 'long' => $lng);
}

Вот полный код, который повторяется только по широте и долготе.

$xml = simplexml_load_string($feed);
$namespaces = $xml->getNameSpaces(true);
foreach ($xml->item as $entry){
    $georss = $entry->children($namespaces['georss']);
    list($lat,$lng) = explode(' ', (string)$georss->point);
    echo "$lat, $lng\n";
}
0 голосов
/ 06 марта 2012

Я не вижу, чтобы SimpleXmlElement::item() определялось в классе. Вы имеете в виду SimpleXmlElement::children?

что означает:

foreach ($xml->children() as $entry) { ... }
...