Gå til innhold

[Løst] Skrive ut tall over en grense.


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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 av Crowly
Lenke til kommentar

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

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 av SNIPPSAT
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...