array_push associative array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan Janssen

Stefan Janssen

14/04/2021 20:48:13
Quote Anchor link
Goede avond,


Onderstaand heb ik een functie gemaakt die namen en functies in een array moet zetten.
Elke naam kan meerdere functies hebben.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
function addName( $firstname, $func ){
    $names = array();
    array_push ( $names[$firstname], $func );
    print_r ($names);
}


addName( 'Stefan', 'manager' );
addName( 'Stefan', 'sales' );
addName( 'Bert', 'sales' );
?>



De print_r geeft de error WARNING array_push() expects parameter 1 to be array, null given on line number 3

Waarom geeft deze null aan terwijl deze gevuld is?
 
PHP hulp

PHP hulp

12/01/2025 00:40:10
 
Adoptive Solution

Adoptive Solution

14/04/2021 21:03:15
Quote Anchor link
Probeer dit :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
array_push ( $names, $firstname, $func );


Uitleg hier :

https://www.w3schools.com/php/func_array_push.asp
 
Rob Doemaarwat

Rob Doemaarwat

14/04/2021 21:16:00
Quote Anchor link
Als je uiteindelijk dit verwacht:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
array(
  'Stefan' => array(
    'manager',
    'sales'
  ),
  'Bert' => array(
    'sales'
  )
);

Dan is dit je oplossing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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);

?>
Gewijzigd op 14/04/2021 21:17:09 door Rob Doemaarwat
 
Adoptive Solution

Adoptive Solution

14/04/2021 22:05:33
Quote Anchor link
Met die avondklok moet je toch wat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<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>';

?>
Gewijzigd op 14/04/2021 22:07:12 door Adoptive Solution
 

15/04/2021 20:09:57
Quote Anchor link
Adoptive Solution op 14/04/2021 22:05:33:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$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.
Gewijzigd op 17/04/2021 11:19:50 door
 



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.