Link gekopieerd
Als je uiteindelijk dit verwacht:
array(
'Stefan' => array(
'manager',
'sales'
),
'Bert' => array(
'sales'
)
);
Dan is dit je oplossing:
<?php
$names = [];
function addName($firstname,$func){
global $names;
if(!array_key_exists($firstname,$names)) $names[$firstname] = [];
$names[$firstname][] = $func; //dit kan ook met array_push()
}
addName('Stefan','manager');
addName('Stefan','sales');
addName('Bert','sales');
print_r($names);
?>
Link gekopieerd
Met die avondklok moet je toch wat.
<h3>Array</h3>
<?php
$names = [];
$Stefan = [ 'Stefan' => ['manager','sales'] ];
$Bert = [ 'Bert' => ['sales']];
$names = array_merge ( $names, $Stefan );
$names = array_merge ( $names, $Bert );
echo '<pre>' . print_r ( $names , TRUE ) . '</pre>';
$naam = 'Stefan';
echo '<p>De functie van <b>' . $naam . '</b> is <b>' . $names[ $naam ][0] . '</b>' . ( $names[ $naam ][1] <> '' ? ' en <b>' . $names[ $naam ][1] . '</b>' : '' ) . '.</p>';
$naam = 'Bert';
echo '<p>De functie van <b>' . $naam . '</b> is <b>' . $names[ $naam ][0] . '</b>' . ( $names[ $naam ][1] <> '' ? ' en <b>' . $names[ $naam ][1] . '</b>' : '' ) . '.</p>';
?>
<h3>Object</h3>
<?php
$personeel = new stdClass;
$Stefan = new stdClass;
$Stefan->functie = (object)['manager','sales'];
$Stefan->functieschaal = 10;
$Bert = new stdClass;
$Bert->functie = (object)['sales'];
$personeel->Stefan = $Stefan;
$personeel->Bert = $Bert;
echo '<pre>' . print_r( $personeel, TRUE ) . '</pre>';
$naam = 'Stefan';
echo '<p>De functie van <b>' . $naam . '</b> is <b>' . $personeel->{$naam}->functie->{0} . '</b> en heeft functieschaal <i>' . $personeel->{$naam}->functieschaal . '</i></p>';
$naam = 'Bert';
echo '<p>De functie van <b>' . $naam . '</b> is <b>' . $personeel->{$naam}->functie->{0} . '</b>' . ( $personeel->{$naam}->functieschaal <> '' ? ' en heeft functieschaal <i>' . $personeel->{$naam}->functieschaal . '</i>' : '' ) . '</p>';
?>
Link gekopieerd
Adoptive Solution op 14/04/2021 22:05:33
$Bert->functie = (object)['sales'];
Huh, heeft PHP toch een object als native type om naar te casten?
Wat heb ik gemist, is dat nieuw in PHP8 of kan je dat ook al in 7 gebruiken?
Aanvulling:
https://www.php.net/manual/en/language.types.object.php
Maar toch gek, ik heb eerder gelezen dat er geen basistype was van een object waarvan je kan extenden.
Nog een aavulling: ik denk dat ik het actief heb genegeerd dat het kan, omdat ik meer een C++ -achtige manier van gebruik van objecten nastreef, omdat ik het nut niet direct inzag. Meestal als je objecten gebruikt als data, ga je het op een gegeven moment omkeren met Reflection en voor je het weet is de performance naatje.
Toch bedankt voor dit codevoorbeeld dat me voorhoudt dat het soms ook anders kan.
Link gekopieerd