Undersidor

Användarmeny

Php Array Problem

Svara
Visar 1-7 av 7
  •  

Hejsan.
(Koden är World of Warcraft relaterad)
Jag började leka med att försöka få fram speciella värden från wowarmory.
Det jag tänkte göra är att få fram ett visst värde på en speciell faktion.

Så här ser xmlfilen jag tar ifrån http://eu.wowarmory.com/c(...)is&gn=Wades+Entourage

och så här ser arrayen jag får fram ut http://superjoel.net/wowrep_array.php

Jag har helt kört fast då det gäller att skriva ut alla faktioner. Det jag vill göra är att välja en faktion (baserat på namn) och då få ut reputation värdet..

För tillfället är det :

$obj = simplexml_load_file("http://superjoel.net/wowrep.php");
$obj = get_object_vars($obj);

$factions=$obj->characterInfo->reputationInfo->getElementsByTagName('faction');
foreach($factions as $row) {
    echo $row->getAttribute("name");
}

Men som ni ser så funkar det inte.

Tack för hjälpen :)

Ändrat totalt 1 gång(er), senast 27/3 22:14 av joe

The proud owner of www.superjoel.net !

Problemet i ditt kodstycke är att jag tror inte det finns någon funktion som heter getAttribute. Såhär tror jag det ska skrivas istället:

echo $row->attributes()->name;

getElementsByTagName vet jag inte heller om man behöver (om den ens finns), det ska räcka med $obj->characterInfo->reputationTab->faction. Plus att du kan nog skippa get_object_vars, mycket roligare att jobba direkt med XML-objektet :)

Och sen får du göra en till loop för att få ut alla factions i kategorin.

Edit: En variabel hette visst reputationTab också...

Ändrat totalt 1 gång(er), senast 28/3 10:22 av Arood

Marcus Olovsson. Det är jag det.

Som vanligt har du helt rätt Arood.
Den skriver nu ut factionerna som ligger under reputationTab.. Men inte dom factionerna som liger under factionerna i reputationTab.

Jag får med andra ord bara fram kategorierna som det ligger factions under.. Hur skulle ni konstruera en loop som loopar allt?

$factions=$obj->characterInfo->reputationTab->faction;
foreach($factions as $row) {
    echo $row->attributes()->name." - ".$row->attributes()->key." - ".$row->attributes()->reputation."<br />";
}

Passade på att ta bort get_object_vars :)

The proud owner of www.superjoel.net !

Är det något sådant här du tänker på kanske? :)

<?php

    $obj 
simplexml_load_file("http://superjoel.net/wowrep.php");
    
    
$factions=$obj->characterInfo->reputationTab->faction;
    
    echo 
"<ul>";
    foreach(
$factions as $row) {
        echo 
"<li>$row->attributes()->name." - ".$row->attributes()->key." - ".$row->attributes()->reputation."</li>";
    
        echo 
"<ul>";
        foreach (
$row->faction as $row2) {
            echo 
"<li>$row2->attributes()->name "</li>";
        }
        echo 
"</ul>";
    }
    echo 
"</ul>";

?>

Passade på att bygga in det i ul-li så man ser lite skillnad på saker.

Ändrat totalt 2 gång(er), senast 28/3 15:57 av Neme

Snyggt Neme!

Lyckades skriva ut allt med hjälp av din kodsnutt :)

<?php
$factions
=$obj->characterInfo->reputationTab->faction;
echo 
"<ul>";
    foreach(
$factions as $row) {
        echo 
"<li>$row->attributes()->name." - ".$row->attributes()->key." - ".$row->attributes()->reputation."</li>";
        echo 
"<ul>";
        foreach (
$row->faction as $row2) {
            echo 
"<li>$row2->attributes()->name "</li>";
    echo 
"<ul>";
            foreach (
$row2->faction as $row3) {
                echo 
"<li>$row3->attributes()->name "</li>";
               }
    echo 
"</ul>";
        }
        echo 
"</ul>";
    }
echo 
"</ul>";
?>

Hur tror ni det är lättast att få fram ett specifikt reputation från namnet?

Jag tänker mig att det ska vara en funktion som heter getRep("faktion-namn") som returnerar $row->attributes()->reputation..

Ändrat totalt 1 gång(er), senast 28/3 17:01 av joe

The proud owner of www.superjoel.net !

Jag tror inte det finns någon inbyggt funktion för att leta genom värden i en XML-fil. Du får nog bygga en egen funktion som loopar igenom noderna i XML-filen själv.

Marcus Olovsson. Det är jag det.

Löste det på följande sätt

<?php
foreach ($obj->xpath('//faction') as $faction) {
        if (
$faction->attributes()->header != "1") {
                
$key $faction->attributes()->key;
                
$rep $faction->attributes()->reputation;
                
// echo $key." * ".$rep."<br />";
                // if ($rep <= 0) $rep = 0 ;
                
$row["$key"] = $rep;
        }
}
?>

Hoppas min lösning kanske hjälper någon :)

Ändrat totalt 1 gång(er), senast 5/4 22:09 av joe

The proud owner of www.superjoel.net !

Visar 1-7 av 7
  •