Avatar billede Springform Nybegynder
12. oktober 2010 - 15:00 Der er 9 kommentarer og
1 løsning

Funktion i for loop

Jeg er igang med at lave et script der henter data fra xml fil, her i blandt er en række billeder som jeg vil have hentet ned på egen server og skalere dem.

include("func_imgupload.php");
                       
for($i=1; $i <= $img_count; $i++){
  $pic_url = $property->images->image[$i]->url;
  $pic_title = $property->images->image[$i]->url;
                           
  check_img($prop_id,$pic_url,$pic_title);
}


Når jeg gør sådan så køre den funktionen igennem men variablerne der bliver sendt til funktionen ændres ikke og det er det samme billede der hentes og skaleres.
Avatar billede cronaldo Nybegynder
12. oktober 2010 - 15:03 #1
Har du prøvet at udskrive variablerne og se om der er indhold?

Og dernæst, har du prøvet at udskrive $i for at se hvad den indeholder?

og hvor sætter du $img_count?? :)
Avatar billede Springform Nybegynder
12. oktober 2010 - 15:11 #2
Jeg har tjekket om der er data i, og det er der.

$img_count her:

$img_count = count($property->images->image);


Jeg har fået et simpelt eksempel til at fungere men det er som om man ikke kan loope en funktion :/. Funktionen virker for sig og mit loop virker for sig. Men sammen, så er det bare et enkelt billede der som sagt bliver hentet og skaleret mange mange gange
Avatar billede cronaldo Nybegynder
12. oktober 2010 - 15:23 #3
og du er sikker på, at $property->images->image er et array?

tjek med is_array(); ..

og såfremt det er burde du også kunne:

foreach( $property->images->image as $k => $v )
{
  $pic_url = $property->images->image[$k]->url;  // $property->images->image[$i]->url;
  $pic_title = $property->images->image[$k]->url; // $property->images->image[$i]->url;
                           
  check_img($prop_id,$pic_url,$pic_title);
}


prøv det.. ellers er der nok også andre muligheder - hvis du fx lige laver en

print '<pre>';
print_r( $property->images->image );
print '</pre>';

og smider den i et indlæg herinde - så kan jeg lige se hvordan dit array er opbygget :P
Avatar billede Springform Nybegynder
12. oktober 2010 - 15:27 #4
Den udskriver følgende rigtig mange gange, så har kun lige taget en enkelt ud

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 1
        )

    [url] => http://www.homeespana.co.uk/images/properties/41936/277235.jpg
    [primary] => 1
    [title] => SimpleXMLElement Object
        (
            [en] => Front elevation
        )

)
Avatar billede cronaldo Nybegynder
12. oktober 2010 - 15:43 #5
Så prøv med følgende? Jeg kender ikke lige dit framework, men kunne da være, at det virkede :)

foreach( $property->images->image as $k => $v )
{
  $pic_url = $v;  // tidligere: $property->images->image[$i]->url;
  $pic_title = $v; // tidligere: $property->images->image[$i]->url;
                           
  check_img($prop_id,$pic_url,$pic_title);
}
Avatar billede Springform Nybegynder
12. oktober 2010 - 15:55 #6
den skal lige hedde $v->url, men ja kommer frem til samme resultat at den tager det samme billede om og om igen.

Der må næsten ligge en fejl i min funktion. Og lige i det jeg skriver dette kunne jeg tænke mig til hvad det er. Må jeg lige teste :P
Avatar billede Springform Nybegynder
12. oktober 2010 - 16:00 #7
hehe, ja det var så mig der havde dummet mig :(... Havde i en test brugt variblen der bliver sendt til functionen til en define(), og der er jo klart at den ikke kan defineres på ny ;).

Tror det er tid til en pause, smid et svar så får du lige lidt point for at have prøvet at løse det uløselige :P
Avatar billede cronaldo Nybegynder
12. oktober 2010 - 16:03 #8
Jeg samler ikke på point, ellers tak..
men jeg er ikke tilfreds med ikke at kunne løse problemet ;)

Der må være noget galt, hmmm..

har du prøvet at lave en print_r($property); ??
Avatar billede Springform Nybegynder
12. oktober 2010 - 16:08 #9
Jamen problemet er skam løst nu. Alt klapper.

Har benyttet følgende, det giver i sidste ende det samme som min for loop. Men vil tro at foreach er hurtigere?

foreach( $property->images->image as $k => $v ){
  $pic_url = $v->url;
  $pic_title = $v->url;
                                 
  check_img($prop_id,$pic_url,$pic_title);
}


Problemet lå i min check_img(), ganske simpel tanketorsk.

Så det var kun et uløseligt problem ift. de oplysninger jeg gav
Avatar billede cronaldo Nybegynder
12. oktober 2010 - 16:10 #10
Okay - det er fornemt! :)

Så virker alt - og jeg er ret sikker på, at foreach er hurtigst ;)

Hav en god dag.
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