Avatar billede kgp43 Nybegynder
20. februar 2005 - 02:02 Der er 12 kommentarer og
3 løsninger

output afhængig af antal

Hej,

Hmmm, dette kan godt blive lidt svært at forklarer, men håber det går.

I min database har jeg en varchar der indeholder nogle tal adskilt af et komma - lad os bare sige den indeholder tallene:
1,5,7,12,14,18,21,22,23,24,25,27,30,45,47

Har brug for at få vist seks(6) tal ad gangen.

Ex.
- Hvis en bruger indtaster tallet 1, så skal den vise se første 6 numre (i dette tilfælde 1,5,7,12,25,27).
- Hvis en bruger indtaster tallet 12, så skal den stadig kun vise de første 6 numre (i dette tilfælde 1,5,7,12,25,27).
- Hvis en bruger indtaster tallet 22, så skal den vise de næste seks(6) tal (da #22 er nummer 7 i rækken af tal): 21,22,23,24,25,27.
- Hvis brugeren derimod indtaster tallet 45, så skal den bare vise de sidste 6 tal (i dette tilfælde 24,25,27,30,45,47)

- Håber i forstår hvad jeg mener.
Avatar billede rasher Nybegynder
20. februar 2005 - 02:54 #1
Det må du vist lige uddybe lidt.. hvorfor får du "21,22,23,24,25,27" udfra tallet 22?
Avatar billede kgp43 Nybegynder
20. februar 2005 - 02:59 #2
Tilføjede nogle tal efter jeg havde den del :P

Skulle selvfølgelig være:


Ex.
- Hvis en bruger indtaster tallet 1, så skal den vise se første 6 numre (i dette tilfælde 1,5,7,12,14,18).
- Hvis en bruger indtaster tallet 12, så skal den stadig kun vise de første 6 numre (i dette tilfælde 1,5,7,12,14,18).
- Hvis en bruger indtaster tallet 22, så skal den vise de næste seks(6) tal (da #22 er nummer 7 i rækken af tal): 21,22,23,24,25,27.
- Hvis brugeren derimod indtaster tallet 45, så skal den bare vise de sidste 6 tal (i dette tilfælde 24,25,27,30,45,47)
Avatar billede kgp43 Nybegynder
20. februar 2005 - 03:02 #3
dit spørgsmål:

Det gør jeg fordi, der skal vises 6 tal på hver side

1,5,7,12,14,18
21,22,23,24,25
27,30,45,47

- Den sidste række har ikke seks tal, så 25 skal inkluderes.
Avatar billede kgp43 Nybegynder
20. februar 2005 - 03:03 #4
24+25 (så den også har 6 tal)
Avatar billede Slettet bruger
20. februar 2005 - 03:04 #5
Hvad så hvis talrækken har mindre end seks tal i alt?
Skal der så bare vises dem der er?
Avatar billede kgp43 Nybegynder
20. februar 2005 - 03:07 #6
lol... der gik da lige ged i den talrække

rettelse:
1,5,7,12,14,18
21,22,23,24,25,27
30,45,47

(den sidste række indeholder kun 3 tal, så vi henter de sidste tre tal fra den forrige række, dvs 24,25,27)
Avatar billede kgp43 Nybegynder
20. februar 2005 - 03:07 #7
ja, det er korrekt :)
Avatar billede rasher Nybegynder
20. februar 2005 - 03:13 #8
Det her kunne helt klart gøres nemmere, flottere og mere elegant.. men..:

function six_numbers($input, $number) {
  $numbers = explode(',', $input);
  $foundat = false;
  for ($i = 0; $i < sizeof($numbers); $i++) {
    if ($numbers[$i] == $number) {
      $foundat = $i;
      break;
    }
  }
  if ($foundat === false) { return false; }

  if ($i > sizeof($numbers) - 6) {
    $return = array_splice($numbers, sizeof($numbers) - 6, 6);
  }
  else {
    $return = array_splice($numbers, floor($i / 6)*6, 6);
  }
  return implode(',', $return);
}

$input = '1,5,7,12,14,18,21,22,23,24,25,27,30,45,47';

echo six_numbers($input, '1')."\n";
echo six_numbers($input, '12')."\n";
echo six_numbers($input, '22')."\n";
echo six_numbers($input, '45')."\n";
Avatar billede rasher Nybegynder
20. februar 2005 - 03:17 #9
Put evt. lige en "if (sizeof($numbers) < 6) { return implode(',', $numbers); }" i anden linje af funktionen (efter $numbers = ...) for at holde styr på input under 6 elementer
Avatar billede kgp43 Nybegynder
20. februar 2005 - 03:25 #10
Sådan her?



function six_numbers($input, $number) {
  $numbers = explode(',', $input);
  if (sizeof($numbers) < 6) {
    return implode(',', $numbers);
  }"
  $foundat = false;
  for ($i = 0; $i < sizeof($numbers); $i++) {
    if ($numbers[$i] == $number) {
      $foundat = $i;
      break;
    }
  }
  if ($foundat === false) { return false; }

  if ($i > sizeof($numbers) - 6) {
    $return = array_splice($numbers, sizeof($numbers) - 6, 6);
  }
  else {
    $return = array_splice($numbers, floor($i / 6)*6, 6);
  }
  return implode(',', $return);
}

$input = '1,5,7,12,14,18,21,22,23,24,25,27,30,45,47';

echo six_numbers($input, '1')."\n";
echo six_numbers($input, '12')."\n";
echo six_numbers($input, '22')."\n";
echo six_numbers($input, '45')."\n";
Avatar billede kgp43 Nybegynder
20. februar 2005 - 03:32 #11
der ud til at virke fint :)

Er det muligt at få de 6 værdier ud som variabler i stedet for? ex. $var1, $var2....
Avatar billede Slettet bruger
20. februar 2005 - 13:20 #12
Det er vel:

$var1 = six_numbers($input, '1');

Osv :)
Avatar billede rasher Nybegynder
21. februar 2005 - 00:15 #13
Hvis du fjerner kaldene til implode() - vil du få et array tilbage der indeholder de 6 tal.

så fx næst-sidste linje rettes til blot: return $return; (så virker echo six_numbers() selvfølgelig ikke mere :)

så kan du tilgå dem sådan:
$result = six_numbers($input, '1');
$var1 = $result[0];
$var2 = $result[1];

osv.
Avatar billede rasher Nybegynder
21. februar 2005 - 20:57 #14
en lidt pænere, rettet udgave der returnerer et array:

function six_numbers($input, $number) {
        $numbers = explode(',', $input);
        if (sizeof($numbers) < 6) {
                return $numbers;
        }
        $index = array_search($number, $numbers);

        if ($index === false || $index === NULL) {
                return false;
        }
        elseif ($index > sizeof($numbers) - 6) {
                return array_splice($numbers, sizeof($numbers) - 6, 6);
        }
        else {
                return array_splice($numbers, floor($index / 6)*6, 6);
        }
}
Avatar billede kgp43 Nybegynder
24. februar 2005 - 02:34 #15
takker for hjælpen, virker perfekt :)
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