Hallo,

kunnen jullie me helpen met een probleempje:

Stel, ik heb een php var die er zo uitziet: $var1 = "156378346" (deze var wijzigt niet)
een tweede var is dit: $var2 = "1567836" (deze var bevat telkens een andere reeks cijfers)

elk cijfer in de tweede var moet vergeleken worden met de reeks cijfers in de eerste var.
Na vergelijking moet ik als resultaat bijvoorbeeld een array krijgen zoals dit:
array{
1 => 'ok',
5 => 'ok',
6 => 'ok',
3 => 'niet ok',
7 => 'ok',
8 => 'ok',
3 => 'ok',
4 => 'niet ok',
6 => 'ok'
}
de 'niet ok' waardes komen dus in de tweede array NIET voor.
Natuurlijk rekening houdend met de volgorde van de reeks.

Hoe doe ik dit? Ik veronderstel met een preg_match functie?

Alvast bedankt voor jullie hulp...

Groetjes
Jan
ik denk dat het scheelt als je een toepassing hiervoor zou schetsen.

Nu is het een nogal vage puzzel.
Ok, even ruw schetsen:
elk cijfer in de eerste var is een id van een bepaald gebouw. De reeks gebouwen is eigenlijk een wandeling die een wandelaar in die volgorde moet doen.
de tweede var zijn de gebouwen die de wandelaar uiteindelijk heeft bezocht. Ik moet dus kunnen uitmaken of de wandelaar de wandeling in de juiste volgorde heeft gewandeld en of hij bepaalde gebouwen wel of niet gepasseerd is.
De waarde 'niet ok' in de resultaat array betekent dus dat de wandelaar in dit gebouw niet geregistreerd is.
maar aangezien "6" vaker voorkomt: komt gebouw 6 dan vaker voor in de wandeling?

Is het werken met een array niet handiger?
Je hebt het nu over cijfers, maar wat als er meer dan 10 gebouwen verschijnen? Dan heb je ineens niet genoeg aan 0-9 als cijfers. IDs met A-Z erbij kan dan nog tot 36 tekens upgraden, maar ik blijf erbij dat een array een betere oplossing zou zijn
inderdaad, een gebouw kan vaker voorkomen in een reeks. En vermits er nooit meer dan 9 gebouwen voorkomen had ik met die cijfers gewerkt.
Indien arrays gemakkelijker zijn, dan wil ik het daarmee ook doen...
Je bedoelt dus dat var1 en var2 array1 en array2 worden. Hoe vergelijk ik die dan?
<?php
$plan = array();
$plan[] = 1;
$plan[] = 5;
$plan[] = 6;
$plan[] = 3;
$plan[] = 7;

$werkelijk[] = 1;
$werkelijk[] = 5;
$werkelijk[] = 6;
$werkelijk[] = 7;
$werkelijk[] = 8;

$pointer = 0; // wijst element in $werkelijk aan.
for($i=0; $i<count($plan);$i++) {
echo $plan[$i] ;

if($plan[$i] == $werkelijk[$pointer]) {
echo ' ok';
$pointer++;
}
else {
echo ' niet ok';
// doe niets met pointer
}
}
?>


zo iets denk ik

-- edit $plan en $werkelijk verwisseld
<?php
$var1 = "156378346";
$var2 = "1567836";
$array = array();
$j = 0;
for($i=0; $i<strlen($var1); $i++)
{
if($var1[$i] == $var2[$j])
{
$array[] = $var1[$i] . ' => Ok';
$j++;
}
else
{
$array[] = $var1[$i] . ' => Niet ok';
}
}
foreach($array as $value)
{
echo $value .'<br/>';
}
?>
je maakt daarmee gebruik van de mogelijkheid om een string als een array te beschouwen.
Maar je mist daarmee de mogelijkheid om de id langer dan 1 karakter te gebruiken.

Het zijn nu cijfers. Maar zodra het er meer dan 9 worden, heb je een probleem.
Doorgaans zul je daarna voor "10" willen gaan.
Een slimme oplossing zou nog zijn om met A verder te gaan. Maar bij nr 36 ben je weer door de reeks heen.

Je kan hier inderdaad niet verder gaan dan 9 items te vergelijken. Maar voor mijn project is niet meer nodig.
Alvast bedankt voor jullie hulp!
is niet meer nodig


famous last words...

zoals "640K ought to be enough for anybody." (Bill Gates)

of Operating systems die niet meer dan 32k adressen of HD > 2GB niet aan kunnen, want zo groot wordt het toch nooit.

Reageren