Multidimensionale array naar functie. (warning)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Alex Hakkenberg

Alex Hakkenberg

16/08/2012 17:41:44
Quote Anchor link
Hoi,

Ik ben bezig met een soort proof of concept om straks een uitgebreidere functie op te bouwen.

Ik wil graag een multidimensionale array naar een functie versturen om vervolgens daar de gegevens weer op te halen.

Dit heb ik min of meer werkende.
Maar ik krijg een mooie warning.

En ik heb geen flauw idee hoe ik deze warning zou moeten wegkrijgen.

Dit is de code die ik inmiddels heb:

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
<?php

function test($waarde){
    while (list ($key, $val) = each ($waarde)) {
        while (list ($let, $detail) = each ($val)) {

            echo $detail."<br>";
        }
    }
}


$fiets = array("gazelle", "batavus", "peugot", "giant");

$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan");

test($fiets);

?>


En dit de foutmelding (warning):

( ! ) Warning: Variable passed to each() is not an array or object in C:\wamp\www\test\function-array\multidimensionalarray.php on line 5
 
PHP hulp

PHP hulp

28/11/2024 16:08:23
 
Erwin H

Erwin H

16/08/2012 17:46:58
Quote Anchor link
Dan ben je aan het einde van de array gekomen en probeer je het waarschijnlijk op de laatste 'false' te doen wat niet gaat werken.

Handiger om dan maar meteen met de language construct 'foreach' te gaan werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach ( $waarde as $key => $val ){

}

?>


Toevoeging op 16/08/2012 17:48:58:

Of (waarschijnlijker overigens), je hebt een paar niet zo multidimensionale elementen. Je initialiseert $fiets namelijk met een array. Als je er dus doorheen gaat lopen heb je een aantal elementen die geen array zijn, maar een string. Daarop kan je each() niet loslaten. Bij de tweede loop moet je dus eerst testen of $val wel een array is (met de functie is_array()).
 
Alex Hakkenberg

Alex Hakkenberg

16/08/2012 19:30:43
Quote Anchor link
Dank je.
Wel weer een stuk verder.

Nu alle elementen gelijk gemaakt. Ervanuit gaande dat het dus allemaal gelijk moet zijn.

Maar nog steeds niet wat ik zoek.
Mijn code:

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
<?php

function test($waarde){
    echo "<ul>";
    foreach ( $waarde as $key => $val ){
        echo "<li>".$val;
        echo "<ul>";
        foreach ( $val as $key => $let ){
            echo "<li>".$let."</li>";
        }

        echo "</ul></li>";
    }

    echo "</li>";
}


$fiets = array("gazelle", "batavus", "peugot", "giant");

$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet", "hans");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan", "izaak");

test($fiets);

?>


Dit is wat ik krijg:
Afbeelding

Het is te zien dat hij het volgende doet:

gazelle
batavus
peugot
giant
Array
jantje
klaasje
peter
Array
onno
piet
hans
Array
waldek
otto
cornelis
Array
stanislaw
daan
izaak

Hij maakt dus een lijst met alle fietsen.
En dan begint hij alsof hetzelfde in een rijtje hoort de rest door te parsen.
Dan krijgt hij idd non objects.

Maar hoe verhelp ik dit?? Ik ben een beetje een leek in dit soort dingen.
 
Erwin H

Erwin H

16/08/2012 19:36:47
Quote Anchor link
Doe eens een print_r() op je array, dan zie je hoe de hele array eruit komt te zien. Dat is denk ik even anders dan je verwacht.

Overigens kan je dat verder niet gebruiken, want je krijgt wel alles te zien, maar met een print_r kan je er niet doorheen lopen. Het gaat er nu even om dat je een beeld krijgt van hoe je datastructuur eruit ziet.
 
Alex Hakkenberg

Alex Hakkenberg

16/08/2012 19:58:54
Quote Anchor link
Met print_r komt er wel een hele rare waarde uit

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
<?php
Array
(
    [
0] => gazelle
    [1] => batavus
    [2] => peugot
    [3] => giant
    [gazelle] => Array
        (
            [
0] => jantje
            [1] => klaasje
            [2] => peter
        )

    [
batavus] => Array
        (
            [
0] => onno
            [1] => piet
            [2] => hans
        )

    [
peugot] => Array
        (
            [
0] => waldek
            [1] => otto
            [2] => cornelis
        )

    [
giant] => Array
        (
            [
0] => stanislaw
            [1] => daan
            [2] => izaak
        )

)

?>


Alsof hij de array twee keer doorloopt??
Gewijzigd op 16/08/2012 19:59:34 door Alex Hakkenberg
 
Erwin H

Erwin H

16/08/2012 21:45:58
Quote Anchor link
Zoals ik al zei, je krijgt iets anders dan dat je verwacht. Maar dit klopt, jouw verwachting dus niet.

Als je dit doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$fiets
= array("gazelle", "batavus", "peugot", "giant");
?>

Heb je een array $fiets met vier waardes erin, niet vier keys. Bovenstaande is hetzelfde als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$fiets
= array();
$fiets[] = 'gazelle';
$fiets[] = 'batavus';
$fiets[] = 'peugot';
$fiets[] = 'giant';
?>
 
Alex Hakkenberg

Alex Hakkenberg

16/08/2012 22:55:05
Quote Anchor link
Maar is het dan mogelijk een multidimensionale array mee te geven??
 
Ivo Breeden

Ivo Breeden

17/08/2012 00:28:12
Quote Anchor link
Maar natuurlijk kan dat, Alex.
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$fiets
= array('gazelle'=>array("jantje", "klaasje", "peter"),
        'batavus'=>array("onno", "piet", "hans"),
        'peugot'=>array("waldek", "otto", "cornelis"),
        'giant'=>array("stanislaw", "daan", "izaak") ) ;

?>
 
Erwin H

Erwin H

17/08/2012 08:47:17
Quote Anchor link
Even los van het antwoord van Ivo (wat correct is), het antwoord op de vraag of je een multidimensionale array kan meegeven is ja. Dat doe je namelijk al. Alleen haal je keys en values door elkaar.

Je hebt meerdere manieren om een waarde aan een array te geven:
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
<?php
//maak een array met alleen values (default dan numerieke keys)
$fiets = array("gazelle", "batavus", "peugot", "giant");

//maak een array met keys en values
$fiets = array(
           'gazelle'=>array("jantje", "klaasje", "peter"),
           'batavus'=>array("onno", "piet", "hans"),
           'peugot'=>array("waldek", "otto", "cornelis"),
           'giant'=>array("stanislaw", "daan", "izaak")
         ) ;


//maak een lege array en vul met alleen values
$fiets = array();
$fiets[] = 'gazelle';
$fiets[] = 'batavus';
$fiets[] = 'peugot';
$fiets[] = 'giant';

//maak een lege array en vul met keys en values
$fiets = array();
$fiets["gazelle"] = array("jantje", "klaasje", "peter");
$fiets["batavus"] = array("onno", "piet", "hans");
$fiets["peugot"] = array("waldek", "otto", "cornelis");
$fiets["giant"] = array("stanislaw", "daan", "izaak");
?>

Elk element van een array bestaat uit een key en een value. Een key kan een string zijn (waarmee het een associatieve array wordt) of een getal (integer). Als je geen key meegeeft dan wordt het automatisch een getal. Alleen een key meegeven en geen value kan niet, geef je maar 1 waarde op per element dan is dat dus de value.
Verder kan elke value weer elk datatype zijn en dus ook een array. Dit kan je per element mixen, waardoor een array in php dus verschillende dimensies kan hebben.
 



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.