login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[php] reeks omkeren

Offline Milannetjuhh - 21/09/2007 20:32
Avatar van MilannetjuhhNieuw lid Heey sima's

Ik heb in een array een reeks cijfers onder de honderd.
hoe zou ik dan aan de cijfers kunnen komen die daar NIET inzitten?

Bijv (onder 10):
array = 2 , 3, 5, 8, 10
ik wil = 1, 4, 6, 7, 9

11 antwoorden

Gesponsorde links
Offline avdg - 21/09/2007 20:35 (laatste wijziging 22/09/2007 11:43)
Avatar van avdg PHP gevorderde Ik wil nog eens de code van een ander forum gebruiken, http://www.sitemasters.be/forum/1/24191

Edit: bedoel je de code eronder 
Offline Grayen - 21/09/2007 21:12
Avatar van Grayen PHP ver gevorderde
  1. function numbersExistsNotInArray($aArray, $iLength, $iTotal)
  2. {
  3. if(count($aArray) != $iLength)
  4. {
  5. # Error: De array heeft niet de juiste lengte.
  6. return false;
  7. }
  8.  
  9. $aNumbers = range(1, $iTotal);
  10.  
  11.  
  12. foreach($aArray as $iNumber)
  13. {
  14. unset($aNumbers[$iNumber - 1]);
  15. }
  16.  
  17. shuffle($aNumbers);
  18.  
  19. return array_slice($aNumbers, 0, 5);
  20. }


Zoiets?
Offline Milannetjuhh - 22/09/2007 11:54
Avatar van Milannetjuhh Nieuw lid Lijkt me een beetje onlogisch? 
Eerst unset je heel die array, daarna shuffle je die.
en dan laat je de 1e 5 waardes zien.
Offline MothZone - 22/09/2007 12:05 (laatste wijziging 22/09/2007 12:07)
Avatar van MothZone PHP ver gevorderde heb ff wat in elkaar gezet
weet niet of het werkt

  1. function getAndereGetallen($oldArray, $van = 0, $tot = 10)
  2. {
  3. $andereGetallen = array();
  4.  
  5. for($i = $van; $i <= $tot; $i++)
  6. {
  7. if(!in_array($i, $oldArray))
  8. {
  9. $andereGetallen[] = $i;
  10. }
  11. }
  12. return $andereGetallen;
  13. }
Offline Stijn - 22/09/2007 12:48
Avatar van Stijn PHP expert @MothZone: je script zal werken hoor maar er zijn wat detail foutjes. Dit zal werekn.

  1. function getAndereGetallen($array)
  2. {
  3. $van = $array[0];
  4. $tot = $array[count($array)-1];
  5. $andereGetallen = array();
  6.  
  7. for($i = $van; $i <= $tot; $i++)
  8. {
  9. if(!in_array($i, $array))
  10. {
  11. $andereGetallen[] = $i;
  12. }
  13. }
  14. return $andereGetallen;
  15. }
Offline Grayen - 22/09/2007 13:25 (laatste wijziging 22/09/2007 13:26)
Avatar van Grayen PHP ver gevorderde Wat is er onlogisch aan mijn script? Enige wat ik heb gedaan is degene die NIET als waarde mogen worden gekozen uit de NIEUWE array gehaald, zodat je dus altijd andere waardes krijgt als de waardes uit de array die je had opgegeven, vervolgens gooit hij ze door elkaar, zodat je random waardes krijgt, en dan selecteert hij de hoeveelheid die je per array wilt hebben. Als je een beetje beter had gekeken, had je dit direct kunnen zien, want zo lang is het script niet . Het werkt toch zoals gewenst? anders zou je dat shuffle weg kunnen halen, als je het niet random wilt.

Ik unset dus alleen de waardes die er niet in mogen zitten niet de gehele array, dat is toch nutteloos .
Offline MothZone - 22/09/2007 13:42
Avatar van MothZone PHP ver gevorderde @stijn: ja, zo kan je t ook doen.
Maar als hij de getallen van 1 tot 100 wilt controleren, en de array begint met 2 zal hij 1 er niet bijzetten 
Offline Stijn - 22/09/2007 13:55
Avatar van Stijn PHP expert Inderdaad Mothzone. Maar die $tot van mijn versie is wel goed. Dus het script wordt:

  1. function getAndereGetallen($array , $van = 0)
  2. {
  3. $tot = $array[count($array)-1];
  4. $andereGetallen = array();
  5.  
  6. for($i = $van; $i <= $tot; $i++)
  7. {
  8. if(!in_array($i, $array))
  9. {
  10. $andereGetallen[] = $i;
  11. }
  12. }
  13. return $andereGetallen;
  14. }
Offline Grayen - 22/09/2007 14:18 (laatste wijziging 22/09/2007 14:20)
Avatar van Grayen PHP ver gevorderde @Stijn, ik zou wel van $van = 0, $van = 1 maken .

@Mothzone en Stijn
Als je goed zijn vraag had gelezen, had je zien staan dat hij een reeks van honderd had. Als je dat doet en je geeft bijv 5 waardes onder de honderd, dan krijg je leuk 95 items bij jullie script . Daarnaast is hoe je aan $tot komt erg fout, want stel je hebt 5 items onder de honderd en het laaste getal is 67, dan kan je nooit een getal onder de 100 krijgen. Oftewijl leuk bedacht, maar het werkt niet .

Ik heb een kleine wijziging gemaakt in mijn script, hoef je de lengte niet op te geven en kan hij ook geen false meer returnen .

  1. function numbersExistsNotInArray($aArray, $iTotal)
  2. {
  3. $iLength = count($aArray);
  4.  
  5. $aNumbers = range(1, $iTotal);
  6.  
  7. foreach($aArray as $iNumber)
  8. {
  9. unset($aNumbers[$iNumber - 1]);
  10. }
  11.  
  12. shuffle($aNumbers);
  13.  
  14. return array_slice($aNumbers, 0, $iLength);
  15. }


Edit: - 1 moest weg worden gehaald bij $iLength.
Offline Stijn - 22/09/2007 14:49
Avatar van Stijn PHP expert Oké maar als je goed zijn vraag leest Grayen staat er
Citaat:
hoe zou ik dan aan de cijfers kunnen komen die daar NIET inzitten?


En dat doet het eerste script van Mothzone wel 
Offline Grayen - 22/09/2007 15:09
Avatar van Grayen PHP ver gevorderde
Citaat:
En dat doet het eerste script van Mothzone wel

Doet de mijne dat dan niet? Wel dus . Mothzone script werkt wel, maar zoals ik al zei, als je nu 5 items wilt onder de honderd, zou je bij hem (en de jouwe) 95 items krijgen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.268s