Gå til innhold

Sortering av data i PHP...


Anbefalte innlegg

Hei.

Jeg har er et script som henter ut data fra denne XML filen.

Det jeg lurte på er om det går ann å legge inn en funksjon, der du kan velge om den skal sortere etter rank_name, nickname, profession, eller level.

Slik den er nå, så sortere den etter rank. Høyest rank først. Det kommer nok av at det er slik det blir vist i xml filen.

 

Slik ser php filen ut.. ...noen som har en ide?

 

<?php

# navn på member tag:
$delimiter_tag = "member";

# source url
$url = "http://www.anarchy-online.com/org/stats/d/1/name/6223873/basicstats.xml";

# henter ned xml
if(!($fh = @fopen($url,'r'))){
 die("fikk ikke åpnet url: <a href=\"$url\">$url</a>");
}

# initialiserer vår parser
$xml_parser = xml_parser_create();

# og tilordner funksjoner for å ta seg av ting og tang
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

# her skal vi samle opp alle våre data
$character_data = array();

# midliertidig oppsamlingsarray
$current_character = array();

# bruker en signal variable for å angi når vi er inne i en <member> tag
$in_delimiter_tag = 0;
 
# bruker upper string i XML parsing (hvorfor det????)
$delimiter_tag = strtoupper($delimiter_tag);
 
# søker gjennom xml documentet
while($data = fread($fh, 4096)){
 if(!xml_parse($xml_parser,$data,feof($fh))){
   die(sprintf("XML error: %s på linje %d",
               xml_error_string(xml_get_error_code($xml_parser)),
               xml_get_current_line_number($xml_parser)));
 }
}
xml_parser_free($xml_parser);

# dumper data for å vise hva vi har funnet:
if(isset($_GET['dump'])){
 echo "<pre>";
 print_r($character_data);
 echo "</pre>";
 exit;
}

# heading
echo "<h1>HOuse Maadiah</h1><h2>Number of members: ";
echo count($character_data);
echo "</h2><h3>Avg. level: ";

# finner gjennomsnitt
if(count($character_data)){
 foreach($character_data as $character){
   $snitt += $character['LEVEL']/count($character_data);
 }
}
$snitt = round($snitt);

echo "$snitt</h3>\n";

# teller for å sette bakgrunnsfarge
$counter = 0;

foreach($character_data as $character){
 
 if($i=1-$i)
   echo '<hr style="visibility: hidden; margin: 0; border: 0; clear: both;" />' . "\n";
 
 # character div
 echo '<div style="background-color: ' . ( in_array(++$counter % 4, array(3,0) ) ? '#efefef' : '#cccccc' ) . '; padding: 1em; float: left; width: 380px; overflow: hidden;">' . "\n";  
 
 # navn
 echo '<h2 style="margin-top: 0;">';
 echo $character['FIRSTNAME'] . ' <span style="text-decoration: underline;">' . $character['NICKNAME'];
 echo '</span> ' . $character['LASTNAME'] . "</h2>\n";
 
 # bilde
 echo '<img src="' . $character['SMALLPHOTO_URL'] . '" alt="' . $character['NICKNAME'] . '" style=';
 echo '"float: left; margin: 1em; border: 1px solid #333333;"/>' . "\n";
 
 # resten
 echo '<div style="clear: left;">' . "\n";
 echo '<strong>Rank:</strong> ' . $character['RANK_NAME'] . "<br/>\n";
 echo '<strong>Level:</strong> ' . $character['LEVEL'] . "<br/>\n";
 echo '<strong>Profession:</strong> ' . $character['PROFESSION'] . "<br/>\n";
 echo '<strong>Gender:</strong> ' . $character['GENDER'] . "<br/>\n";
 echo '<strong>Breed:</strong> ' . $character['BREED'] . "<br/>\n";
 echo "</div>\n</div>\n\n";
 
}

# husk at funksjoner har lokalt "name space", må bruke global for å få tilgang
# til andre variable.

function startElement($xml_parser,$name,$attrs){
 global $current_element,$delimiter_tag,$in_delimiter_tag;
 
 # hvis vi er innenfor en <member> tag, skal vi huske på dette tag-navnet
 if($in_delimiter_tag and $name != $delimiter_tag){
   $current_element = $name;
 }
 # eller hvis dette er en <member> tag, så sier vi fra at vi har gått inn i en <member> tag
 else if($name == $delimiter_tag){
   $in_delimiter_tag = 1;
   $current_element = "";
 }
 # hvis ikke, skal vi bare glemme denne tagen
 else{
   $current_element = "";
 }
}

function endElement($xml_parser,$name){

 global $character_data,$delimiter_tag,$current_character;
 
 # ved en /tag, skal vi uansett ikke ha noe i denne variabelen
 $current_element = "";
 
 # hvis vi dessuten har gått ut av en </member> tag, skal vi oppdatere lista med 
 # characteren funnet og gjøre klar for ny character
 if($name == $delimiter_tag){
 # legger til denne charactern i lista
   $character_data[] = $current_character;
   # tømmer oppsamlingslista
   $current_character = array();
   # og sier fra at vi ikke lenger er i en character tag
   $in_delimiter_tag = 0;
 }
}

function characterData($xml_parser, $data){
 global $current_element,$current_character;
 
 # lagrer data funnet
 if($current_element){
 # må bruke trim fordi parsern tar med alt av linjeskifter og blanks
   $current_character{$current_element} .= trim($data);
 }
   
}

?>

Lenke til kommentar
Videoannonse
Annonse

hmmm.... ser ikke ut til at noen har noen tips eller meninger om dette...

..det jeg lurer på da, er om det i heletatt er mulig?

 

Bare en søkefunkjson hadde vert ok også..

Endret av aog
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...