php multidimensional array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Piet Knaap

Piet Knaap

10/06/2014 12:58:11
Quote Anchor link
Ik heb een php multidimensional array gemaakt

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..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
foreach ($Array_Contract as  $key_1 => $value_1) {
    
    echo "<br>"; echo $key_1; echo "- "; echo $value_1;

foreach ($value_1 as  $key_2 => $value_2) {
    
    echo "<br>"; echo $key_2; echo "** "; echo $value_2 ;     
    }
}

?>
 
PHP hulp

PHP hulp

23/04/2024 10:07:56
 
Ward van der Put
Moderator

Ward van der Put

10/06/2014 13:26:16
Quote Anchor link
>> 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
 
Piet Knaap

Piet Knaap

10/06/2014 13:31:35
Quote Anchor link
Bedankt voor de reactie!

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
 
Ward van der Put
Moderator

Ward van der Put

10/06/2014 13:38:23
Quote Anchor link
Even een andere vraag tussendoor: hoe hangen die contracten precies samen? Is contract x + 1 een verlenging van contract x?

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.
 
Piet Knaap

Piet Knaap

10/06/2014 13:51:34
Quote Anchor link
"Even een andere vraag tussendoor: hoe hangen die contracten precies samen? Is contract x + 1 een verlenging van contract x?" <-- JA

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 )
 
Ward van der Put
Moderator

Ward van der Put

10/06/2014 14:15:48
Quote Anchor link
Als de begindatum van het ene contract gelijk is aan de einddatum van een ander contract, sla je redundante gegevens op, namelijk dubbele datums. Twee keer hetzelfde opslaan én dat vergelijken is vaak een teken dat je het model kunt verbeteren.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$contracten
= array(
    123 => array(
        'contractdatum' => '2013-05-01',
    ),

    456 => array(
        'contractdatum'  => '2014-05-01',
        'vorig_contract' => 123,
    ),
);

?>


Kun je zo niet met minder data precies hetzelfde bereiken?
 
Piet Knaap

Piet Knaap

10/06/2014 14:28:47
Quote Anchor link
Ik kan helaas niet hetzelfde bereiken... Ik weet (en wist) dat ik de data redundant bewaar...maar dat is helaas niet anders. Ik heb het nu zo... het lijkt een soort van te werken

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";
}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.