php multidimensional array
Array (
[1] => Array ( [ID] => 219 [CONTRACTDATUMVORIG] => 2014-05-01 [CONTRACTDATUMNIEUW] => 0000-00-00 )
[2] => Array ( [ID] => 218 [CONTRACTDATUMVORIG] => 2013-05-01 [CONTRACTDATUMNIEUW] => 2014-04-30 )
)
Nu wil ik CONTRACTDATUMNIEUW van [2] vergelijken met CONTRACTDATUMVORIG van [1]
Nu heb ik de onderstaande PHP code gemaakt. Maar ik krijg het niet voor elkaar om waardes uit de eerste lus te gebruiken in mijn tweede lus..
Dat komt doordat de eerste lus je steeds slechts één contract (één ID) geeft. Die kun je dus alleen vergelijken met andere contracten/id's door met $Array_Contract[$key + 1] of $Array_Contract[$key - 1] te verwijzen naar een andere id in dezelfde array.
Je hebt dan maar één foreach nodig voor het langslopen van alle contracten, waarbinnen je met array_key_exist() plus die $key +/- 1 controleert of er een volgend/voorafgaand contract is.
Gewijzigd op 10/06/2014 13:26:50 door Ward van der Put
Ik heb mijn code aangepast (nog maar 1 foreach) Alleen waar moet ik dan de array_key_exist precies tussen plaatsen?
$teller_array_plus='1';
foreach ($Array_Contract as $key_1 => $value_1) {
// echo "<br>"; echo $key_1; echo "- "; echo $value_1;
echo " **** "; echo $Array_Contract[$teller_array_plus][ID]; echo " **** ";
echo " AAAA "; echo $Array_Contract[$teller_array_plus][CONTRACTDATUMVORIG]; echo " BBBB ";
echo " CCCC "; echo $Array_Contract[$teller_array_plus][CONTRACTDATUMNIEUW]; echo " DDDD ";
$teller_array_plus=$teller_array_plus+1;
echo "<br>";
}
Gewijzigd op 10/06/2014 13:35:48 door Piet Knaap
Dan zou je het namelijk ook recursief kunnen oplossen door in elk contract de ID van het voorafgaande contract mee te geven. Heeft een contract aan het einde van de recursie geen voorganger meer, dan is dat het eerste contract in de reeks.
Dat model is dan netter, omdat je niet meer afhankelijk bent van datums (die bijvoorbeeld voor meerdere contracten kunnen gelden), maar je heel specifiek naar de unieke ID van een contract verwijst.
Elk contract heeft een eigen ID nummer [1][2] enzovoorts. Het idee is om de datum van het ene contract van [2] te vergelijken met de contractdatum van ID [1]. Dus de vergelijking moet denk ik wel op datum, toch?
CONTRACTDATUMNIEUW van [2] vergelijken met CONTRACTDATUMVORIG van [1]
[1] => Array ( [ID] => 219 [CONTRACTDATUMVORIG] => 2014-05-01 [CONTRACTDATUMNIEUW] => 0000-00-00 )
[2] => Array ( [ID] => 218 [CONTRACTDATUMVORIG] => 2013-05-01 [CONTRACTDATUMNIEUW] => 2014-04-30 )
Bij opeenvolgende contracten kun je hetzelfde bijvoorbeeld zó modelleren. Nu heb je maar één datum nodig en zie je exact hoe de contracten samenhangen:
Code (php)
Kun je zo niet met minder data precies hetzelfde bereiken?
foreach ($Array_Contract as $key_1 => $value_1) {
echo "<br>"; echo $key_1; echo "- "; echo $value_1;
echo " **** "; echo $Array_Contract[$teller_array_plus][ID]; echo " **** ";
echo " AAAA "; echo $Array_Contract[$teller_array_plus][CONTRACTDATUMVORIG]; echo " BBBB ";
echo " CCCC "; echo $Array_Contract[$teller_array_plus][CONTRACTDATUMNIEUW]; echo " DDDD ";
echo " ++++ "; echo $Array_Contract[$teller_array_plus+1][ID]; echo " ++++ ";
echo " AAAA "; echo $Array_Contract[$teller_array_plus+1][CONTRACTDATUMVORIG]; echo " BBBB ";
echo " CCCC "; echo $Array_Contract[$teller_array_plus+1][CONTRACTDATUMNIEUW]; echo " DDDD ";
IF ($Array_Contract[$teller_array_plus][CONTRACTDATUMVORIG] == $Array_Contract[$teller_array_plus+1][CONTRACTDATUMNIEUW])
{
echo "datums zijn gelijk";
}