Ik heb vrij weinig PHP kennis, maar ben een website aan het maken waar dingen over nummerologie op komen te staan. Nu heb ik een script nodig wat het volgende kan:

De gebruiker vult zijn geboortedatum in en daarna moeten die cijfers opgeteld worden. Als dat getal een 11, 22 of 33 is moet dat getal worden getoond. Anders moeten die cijfers weer bij elkaar opgeteld worden, en zo door.

Alvast bedankt, Michel :-)
Hier een methode die doet wat jij wilt. Hij houd geen rekening met gevallen waarbij een getal nooit door 11 te delen zou zijn. Weet niet eens of zo'n geval bestaat. Deze methode werkt alleen met een input van xx-xx-xx.

resultaat van 13-5-86 = 1144 (104*11)

Je vraag is overigens nogal onduidelijk, moeten de resultaten alleen maar 11, 22 en 33 zijn? Wat vult de gebruiker precies in (15-5, 13-5-1986 of 13-5-86). Misschien kun je wat mee wat ik gemaakt heb, zo niet laat dan even weten. Wil ik er nog een keer naar kijken.


echo inTafelVanElf("13-5-86");

  function inTafelVanElf($date) {
  $dates = explode("-", $date);
  $val = $dates[0]+$dates[1]+$dates[2]; 
    while($val%11 != 0) {
       $val += $dates[0]+$dates[1]+$dates[2];
    }
  return $val;
}
Bedankt voor je reactie,

De invoer is xx-xx-xxxx. Allereerst moeten alle cijfers bij elkaar geteld worden ( 1 + 3 + 5 + 1 + 9 + 8 + 6 = 33 ) In dit geval is het getal 33 dus moet hij dit ook als output geven, is het getal iets anders dan 11, 22 of 33 moet deze nogmaals bij elkaar geteld worden en dan moet dit als output gegeven worden.

Ik hoop dat je een beetje snapt wat ik in gedachten heb?
EDIT: enkel maar met de geboortedatum?
Voor zover ik weet (ik ben geen numeroloog) gebeurt het zelfde ook met de naam.
------------------
Ik heb dit ooit gemaakt voor iemand op deze website


<?php
$naamdatum = 'Mark Rutte 1967-02-14';
$steps;
$a = letters2number($naamdatum, $steps);
$b = reduceNumber($a, $steps);
echo $naamdatum . $steps .'<br>';


function letters2number($letters, &$step=null) {
  $step .= '<br>';
  $result = '';
  for ($i=0; $i<strlen($letters); $i++) {
    $letter = substr($letters, $i, 1);
    $char = ord(strtoupper($letter));
    if($char >= 65 && $char <= 90) {  //  65 = A; ... 90 = z;  anything else will be ignored.  No letters with accents, no points or commas, ...
      $result .= ($char - 64);  // so 1 = A, 2 = B; ...
      $step .= ($char - 64) ." ";
    }
    if($char >= 48 && $char <= 57) {  // 0 -> 9
      $result .= $letter;  // the character is a digit; so we just add it
      $step .= $letter ." ";
    }
  }
  return $result;
}
function reduceNumber($number, &$step=null) {
  $step .= '<br>';
  //$number = (int) $number;
  $newNumber = 0;
  for ($i=0; $i<strlen($number); $i++) {
    $newNumber += (int) substr($number, $i, 1);
  }
  if ($newNumber < 10) {
    $step .= $newNumber ;
    return $newNumber;
  }
  else {
    $step .= $newNumber ;
    return reduceNumber($newNumber, $step);
  }
}
?>



Die 11, 22, 33 zou ik moeten toevoegen ...
Nu is de waarde 34, dan doet hij nog eens 3+4. Hier kom dus 7 uit. Als je bedoeld dat hij nog een keer die waarde berekend, dan is het toch gewoon 34+34. Wist niet welke van de twee.

echo start("13-06-1986");

function start($date) {
    $dates = explode("-", $date);
    $val = recursief($dates, 0, 0);
    if($val < 34 && $val%11 == 0) {
        return $val;
    } else {
        //return $val+$val; // Gewoon twee keer dezelfde waarde?
        return recursief(array($val), 0, 0);
    }
}
function recursief($waarde, $val, $times) {
    if($times == count($waarde))
        return $val;
    
    $waardes = str_split($waarde[$times]);
    
        foreach($waardes as $value) {
             $val += $value;
        }
        
    return recursief($waarde, $val, $times+1);
}

Reageren