Gå til innhold

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


Anbefalte innlegg

Skrevet

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.

Videoannonse
Annonse
Skrevet

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.

Skrevet

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?

Skrevet

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?

Skrevet (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 av Crowly
Skrevet

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.

Skrevet (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 av SNIPPSAT

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