Avatar billede superb Nybegynder
17. januar 2008 - 20:23 Der er 15 kommentarer og
1 løsning

Samle data fra to API i array?

Jeg har to forskellige stykker kode, der hver henter noget data, resultatet fra disse to stykker kode, skulle jeg gerne have stoppet sammen i nogle arrays e.l. så de kunne blive præsenteret på formen:
<img src="ImageUrlSmall" />
ProductName - UsedPrice

Den første kode er:
<?php
$doc = new DOMDocument();
$doc->preserveWhiteSpace = FALSE;
$doc->load('http://xml-eu.amazon.com/onca/xml3?KeywordSearch=genes&dev-t=D2WMCOIPS9D14E&f=xml&locale=uk&mode=books&page=1&t=chipdir03&type=lite');
$list = $doc->getElementsByTagName('Details');
foreach($list as $detail) {
    echo 'DetailsUrl = ' . $detail->attributes->getNamedItem('url')->nodeValue . '<br>';
    $node = $detail->firstChild;
    do {
        if($node->nodeName == 'Authors') {
            foreach($detail->getElementsByTagName('Author') as $author) {
                echo 'Author = ' . $author->nodeValue . '<br>';
            }
        } else if($node->nodeName == "ProductName") {
            echo 'ProductName' = array("$node->nodeValue");
        } else if($node->nodeName == "UsedPrice") {
            echo 'UsedPrice = ' . $node->nodeValue . '<br>';
        } else if($node->nodeName == "ImageUrlSmall") {
            echo 'ImageUrlSmall = ' . $node->nodeValue . '<br>';
        }
        $node = $node->nextSibling;
    } while($node != NULL);
}
?>

Her har jeg prøvet at skrive fx:
$UsedPrice = $node->nodeValue;
Men det virker ikke, hvorfor ikke?
Den anden er:
<? 
$lines = file('http://search.blackwell.co.uk/servlet/search?type=title&term=genes&curr=GBP');
foreach ($lines as $line_num => $line)
$pieces = explode("|", $line);
$id = $pieces[0];
$ProductName = $pieces[2];
$UsedPrice = $pieces[3];
$ImageUrlSmall= $pieces[8];

Hvordan samler jeg resultaterne i disse to udtryk, og hvis det er i et array, kan jeg så bare sortere med foreach($x as y$)?
Avatar billede jakobdo Ekspert
17. januar 2008 - 20:33 #1
Kan du ikke smide resultaterne fra begge stykker kode i et STORT ARRAY og sortere på det efterfølgende og vise det som du ønsker?
Avatar billede superb Nybegynder
17. januar 2008 - 20:42 #2
jo men hvordan er det jeg smider det i et array? har prøvet med $UsedPrice = array($node->nodeValue);
Avatar billede jakobdo Ekspert
17. januar 2008 - 21:09 #3
Du kan lave:

$mitArray = array();
$mitArray[] = 'Noget 1';
$mitArray[] = 'Mere 2';
osv...
Avatar billede superb Nybegynder
17. januar 2008 - 22:16 #4
det har jeg prøvet, men når jeg så kalder det array jeg har lavet:
      $Author = array($author->nodeValue);
med
  foreach($Author as $forfatter)
  {
  echo $forfatter. "<br>";
    }
så får jeg kun første navn, jeg får ikke hele listen, hvad er det jeg laver forkert?
Avatar billede jakobdo Ekspert
19. januar 2008 - 21:00 #5
Hvilke data er det du ønsker fra begge arrays?
Avatar billede superb Nybegynder
20. januar 2008 - 11:44 #6
jeg ønsker den der hedder Author, ProductName og UsedPrice. Men jeg kan kun få den til at skrive det første navn i fx Author
Avatar billede jakobdo Ekspert
20. januar 2008 - 17:55 #7
Avatar billede superb Nybegynder
20. januar 2008 - 18:12 #8
præcis.
Avatar billede jakobdo Ekspert
20. januar 2008 - 19:10 #9
<?php
//http://www.eksperten.dk/spm/815232

$output = array();

$doc = new DOMDocument();
$doc->preserveWhiteSpace = FALSE;
$doc->load('http://xml-eu.amazon.com/onca/xml3?KeywordSearch=genes&dev-t=D2WMCOIPS9D14E&f=xml&locale=uk&mode=books&page=1&t=chipdir03&type=lite');
$list = $doc->getElementsByTagName('Details');
foreach($list as $detail) {
    $temp = array();
    $node = $detail->firstChild;
    do {
        if($node->nodeName == 'Authors') {
            $authors = array();
            foreach($detail->getElementsByTagName('Author') as $author) {
                $authors[] = $author->nodeValue;
            }
            $temp['Authors'] = implode(", ", $authors);
        }else if($node->nodeName == "ProductName") {
            $temp['ProductName'] = $node->nodeValue;
        } else if($node->nodeName == "UsedPrice") {
            $temp['UsedPrice'] = $node->nodeValue;
        }
        $node = $node->nextSibling;
    } while($node != NULL);
    $output[] = $temp;
}

$lines = file('http://search.blackwell.co.uk/servlet/search?type=title&term=genes&curr=GBP');
foreach ($lines as $line_num => $line) {
    $temp = array();
    $pieces = explode("|", $line);
    $temp['Authors'] = $pieces[1];
    $temp['ProductName'] = $pieces[2];
    $temp['UsedPrice'] = $pieces[3];
    $output[] = $temp;
}

echo '<pre>';
print_r($output);
echo '</pre>';

?>
Avatar billede superb Nybegynder
20. januar 2008 - 20:42 #10
2 sidste opklarende spørgsmål: hvorfor skriver man <pre> før og efter print? og hvis jeg nu vil udskrive $output pænt, hvad er det så der er forkert i nedenstående:

foreach($output as $ProductName => $Authors = $UsedPrice )
{
    echo $ProductName. "<br>" . $Authors . "<br>" . $UsedPrice;
}
Avatar billede jakobdo Ekspert
20. januar 2008 - 21:09 #11
Jeg ved godt hvad du gør forkert, men prøv lige at kig lidt på denne side: http://dk.php.net/foreach
Hvis ikke du finder svaret, så skal jeg nok hjælpe! :o)

Og et svar.
Avatar billede superb Nybegynder
21. januar 2008 - 10:08 #12
Har ihvertfald fået det til at virke, men er det her den måde man normalt ville gøre det på?
foreach($output as $op)
{
echo $op['Authors'] . "<br>";
echo $op['ProductName'] . "<br>";
echo $op['UsedPrice']. "<br>";

}
Og tusind tak for hjælpen, pointene er på vej
Avatar billede jakobdo Ekspert
21. januar 2008 - 10:13 #13
F.eks. ja!
Eller:
for($i = 0; $i < count($output); $i++)
{
echo $output[$i]['Authors'] . "<br>";
echo $output[$i]['ProductName'] . "<br>";
echo $output[$i]['UsedPrice']. "<br>";
}
Avatar billede superb Nybegynder
21. januar 2008 - 12:08 #14
hvad gør mden sidste anderledes? altså den tæller hvor mange der er?
Avatar billede jakobdo Ekspert
21. januar 2008 - 13:19 #15
Den gør ikke noget anderledes, den gør faktisk det samme.
for() er bare hurtigere. (har jeg fået fortalt herinde)
Avatar billede superb Nybegynder
21. januar 2008 - 15:10 #16
ok, tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester