KaDust Skrevet 30. oktober 2012 Del Skrevet 30. oktober 2012 Okey, la oss si at jeg har arrayen $hei = array(1, 2, 3, 4, 5, 6, 7, 8, 9); og at jeg vil lage en funksjon ala: function rockOn($value); hvor $value er et valgfritt tall, og at alle tallene i arrayen som er over dette tallet skal skrives ut, men ikke de under. Hvordan gjør jeg dette på lettest mulig måte? Hvis noe var uklart så får dere bare si ifra. Jeg er ikke såå flink til på å forklare hva jeg mener. Lenke til kommentar
Crowly Skrevet 31. oktober 2012 Del Skrevet 31. oktober 2012 Ta en titt på foreach: http://w3schools.com/php/php_looping_for.asp (litt ned på siden) http://no2.php.net/manual/en/control-structures.foreach.php Så må du gjøre en test med en if. Du kan skrive ut resultatet fortløpende, eller ta vare på det som skal skrives ut og skrive ut alt på en gang. Vil ikke gi en konkret løsning, da det er mye å lære i å finne ut av dette selv. Lenke til kommentar
MikkelRev Skrevet 31. oktober 2012 Del Skrevet 31. oktober 2012 Finnes også mange array-funksjoner du kan bruke. array_splice(), array_slice() og in_array() er noen du kan bruke. Lenke til kommentar
Crowly Skrevet 31. oktober 2012 Del Skrevet 31. oktober 2012 Kan ikke se hvordan de er nyttig til denne oppgaven. Hvis $value=5 så skal 6-9 skrives ut, hvis $value=1 så 2-9. Står kun større enn og mindre enn, så usikker på hvordan det skal håndteres når tallet er likt $value. Lenke til kommentar
KaDust Skrevet 31. oktober 2012 Forfatter Del Skrevet 31. oktober 2012 Har hatt ganske mye om foreach, men kan ikke tenke meg noen måter å bruke det for dette? Funker det med foreach hvis grensen jeg tester på er et argument? Lenke til kommentar
KaDust Skrevet 31. oktober 2012 Forfatter Del Skrevet 31. oktober 2012 Glem det spørsmålet. Jeg prøvde det slik, men det gir ikke resultater: $dyr = array( "hund" => 2.20, "katt" => 40.22, "fugl" => 5.10, "hest" => 62.66, "ape" => 5.24, "mus" => 9.14, "hamster" => 1.35, "marsvin" =>24.75, "ku" => 15.93, "ulv" => 70.24 ); function findNumbersLarger($number) { global $dyr; $valid_elements = array(); foreach ($dyr as &$value) if ($value >= $number) $valid_elements[] = $value; return $valid_elements; } Har jeg en eller annen massiv feil her? Lenke til kommentar
Crowly Skrevet 31. oktober 2012 Del Skrevet 31. oktober 2012 (endret) Dropp & før $value i foreach'en. Ellers er oppgaven løst (nesten) slik jeg ville ha gjort det. Jeg hadde hatt $dyr som ett parameter i funksjonen i stedet for å bruke global, men det er sikker mer en vane sak. Siden du returnerer en array så kan implode() være nyttig for å skrive den ut, alternativt print_r() (mest brukt for debugging og under utvikling) helst i en <pre> tag echo implode('<br />',findNumbersLarger(5)); // eller echo '<pre>'; print_r(findNumbersLarger(5)); echo '</pre>'; Skal du ha med dyret også så gjør slik function findNumbersLarger($number) { global $dyr; $valid_elements = array(); foreach ($dyr as $key=>$value) { if ($value >= $number) $valid_elements[$key] = $value; } return $valid_elements; } Endret 31. oktober 2012 av Crowly Lenke til kommentar
KaDust Skrevet 31. oktober 2012 Forfatter Del Skrevet 31. oktober 2012 Jeg brukte print_r() og det funker helt greit nå. Greia er at jeg bare prøver meg på litt div., så derfor bruker jeg global selvom jeg vet at det ikke er helt sikkert i mange tilfeller og at det ikke er det beste alternativet. Lenke til kommentar
snippsat Skrevet 1. november 2012 Del Skrevet 1. november 2012 (endret) foreach som brukt her er vel det første man tenker på når en oppgave som dette skal løse i PHP,MikkelRev nevner en del andre funksjoner som vel ikke treffer helt mål når det gjelder denne oppgaven.. Jeg har sett litt på andre løsninger og array_filter er noe som kunne fungere til denne oppgaven. <?php function higher_than($arg){ return $arg > 5;} $numbs = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $filtered_elem = array_filter($numbs, 'higher_than'); print_r($filtered_elem); ?> Fungerer greit,men og gi argument til higher_than funksjonen "higher_than(5)" skapte litt hodebry. Ettersom nå $arg tar array $nums som argument. For meg er PHP langt ifra noe favoritt språk,så viss noe av det jeg poster under er feil ta det gjerne opp. I PHP 5.3 fikk man lambda funksjonerer og Closures. Det er litt av grunnen til denne denne posten,jeg har sett litt på hvordan dette fungerer i PHP. Med lambda function kan man skrive det som dette. $numbs = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $filtered_elem = array_filter($numbs, function ($arg) {return $arg > 5;}); Man kan lagrer lambda funksjonen sin definisjon i in PHP variable. Med closure kan jeg skrive det som dette. <?php function higher_than($number=null){ return function($arg) use($number) {return $arg > $number;};} $numbs = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $filtered_elem = array_filter($numbs, higher_than(5)); print_r($filtered_elem); ?> Da kan jeg gi argument som ønsket over "higher_than(5)". En annen mulighet er dette,her blir $num tatt med med inn fra utsiden. <?php $numbs = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $num = 5; $filtered_elem = array_filter($numbs, function($arg) use ($num){ return $arg > $num;}); print_r($filtered_elem); ?> Endret 1. november 2012 av SNIPPSAT Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå