add element $array[]

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Leen M

Leen M

23/10/2009 20:35:00
Quote Anchor link
Hopelijk is er iemand die mij kan helpen.

De code op regel 5 zorgt voor "Fatal error: [] operator not supported for strings in ..."
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($row['depth'] == $i) {
    $menu[] = $row['title'];
}
elseif($row['depth'] == $i+1) {
    $menu[$i][] = $row['title'];
}

?>


Als ik op regel 5 ipv $i een getal invul, werkt het wel. Maar $i is ook een int. Wat zou het probleem zijn?

Alvast bedankt.
 
PHP hulp

PHP hulp

03/01/2025 11:05:10
 

23/10/2009 20:44:00
Quote Anchor link
In die elseif doe je $i+1, moet die $i op regel vijf dan ook geen +1 hebben?
En waarschijnlijk komt dit uit een loopje o.i.d. en dus is die if al een keer geweest, waardoor in $menu[$i] een string zit (want dat doe je bij de if).
 
Leen M

Leen M

23/10/2009 21:01:00
Quote Anchor link
Inderdaad, dat is de bedoeling en een foutje dat ik nog niet gezien had. Bedankt.

Helaas is dat niet de oplossing. Ik krijg nog steeds dezelfde error.
 

23/10/2009 21:03:00
Quote Anchor link
Doe dan eens een var_dump op $menu[$i] of $menu[$i+1] in die elseif.
 
Leen M

Leen M

23/10/2009 21:28:00
Quote Anchor link
Gedaan, dat levert op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
string(8) "Pagina 1"
string(8) "Pagina 1"
string(8) "Pagina 1"
string(8) "Pagina 2"


Dat is het resultaat van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if($row['depth'] == $i) {
    $menu[] = $row['title'];
    var_dump($menu[$i]);
}
elseif($row['depth'] == $i+1) {
    var_dump($menu[$i+1]);
    $menu[$i+1][] = $row['title'];
}

?>


En dat klopt. $menu[0] is inderdaad "Pagina 1". Dat zie je drie keer want:
deze code staat in een while die het resultaat van een query in een array zet, althans, dat is de bedoeling. De eerste drie items zijn op niveau 0, daarna komt er een item op niveau 1. Daar loopt het dus vast.

EDIT:
Volgens mij heb ik het al door. Er gebeurt inderdaad wat in het eerste antwoord staat.
Gewijzigd op 01/01/1970 01:00:00 door Leen M
 

23/10/2009 21:33:00
Quote Anchor link
Ik snap sowieso niet wat je nu aan het doen bent.
Moet gewoon de inhoud van een row vanuit de database in een array?
Ik vind het ook niet logisch dat je die 'Pagina 1' drie maal ziet.
Maar zoals je ziet, je probeert bij die elseif een array waarde toe te voegen aan een string. Dat kan niet.
 
Koen

koen

29/10/2009 10:07:00
Quote Anchor link
Leen schreef op 23.10.2009 20:35:
Hopelijk is er iemand die mij kan helpen.

De code op regel 5 zorgt voor "Fatal error: [] operator not supported for strings in ..."
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($row['depth'] == $i) {
    $menu[] = $row['title'];
}
elseif($row['depth'] == $i+1) {
    $menu[$i][] = $row['title'];
}

?>


Als ik op regel 5 ipv $i een getal invul, werkt het wel. Maar $i is ook een int. Wat zou het probleem zijn?

Alvast bedankt.


zou het probleem niet kunnen zitten in de lege brackets?
in het eerste deel van de if, gebruik je menu[$i]...
in het 2de deel gebruik je menu[$i][]...
:S
 
Martijn Wieringa

Martijn Wieringa

29/10/2009 10:15:00
Quote Anchor link
Iets inbouwen als:

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

    if($row['depth'] == $i)
    {

        $menu[] = $row['title'];
    }

    elseif($row['depth'] == $i+1)
    {

        if(is_array($menu[$i]) == false)
        {

            $menu[$i] = array();
        }


        $menu[$i][] = $row['title'];
    }


?>
 
Koen

koen

29/10/2009 10:19:00
Quote Anchor link
waar word $i aangemaakt eigenlijk? en waarmee word $i gevuld?
want je kan er wel mee gaan vergelijken...
maar
1. als die niet verandert is telkens controleren niet nodig
2. als die niet aangemaakt word vergelijk je met niks, dus zal array[$i] ook niet werken zoals het moet.
Gewijzigd op 01/01/1970 01:00:00 door koen
 

29/10/2009 12:39:00
Quote Anchor link
koen schreef op 29.10.2009 10:07:
zou het probleem niet kunnen zitten in de lege brackets?
in het eerste deel van de if, gebruik je menu[$i]...
in het 2de deel gebruik je menu[$i][]...
:S

Dude, lezen.
Als je even mijn eerste post leest zie je dat ik uitleg dat hij een string als een array wilt gebruiken.
Je kunt best letters ophalen uit een string op een array manier, maar niet erin stoppen. En sowieso is dat ook hier niet de bedoeling.
Hier is een soort stack nodig.
 
Koen

koen

29/10/2009 13:26:00
Quote Anchor link
Karl schreef op 29.10.2009 12:39:
koen schreef op 29.10.2009 10:07:
zou het probleem niet kunnen zitten in de lege brackets?
in het eerste deel van de if, gebruik je menu[$i]...
in het 2de deel gebruik je menu[$i][]...
:S

Dude, lezen.
Als je even mijn eerste post leest zie je dat ik uitleg dat hij een string als een array wilt gebruiken.
Je kunt best letters ophalen uit een string op een array manier, maar niet erin stoppen. En sowieso is dat ook hier niet de bedoeling.
Hier is een soort stack nodig.


ik heb het gelezen, wat ik typte was rechtstreeks uit jou code.
 
Leen M

Leen M

29/10/2009 13:58:00
Quote Anchor link
koen schreef op 29.10.2009 10:07:
zou het probleem niet kunnen zitten in de lege brackets?
in het eerste deel van de if, gebruik je menu[$i]...
in het 2de deel gebruik je menu[$i][]...
:S


Die lege bracket omdat $array[] = $var hetzelfde effect heeft als array_push().

De bedoeling was om iets aan de array toe te voegen. Inmiddels is mijn probleem opgelost, namelijk met het volgende antwoord:
Karl schreef op 23.10.2009 20:44:
In die elseif doe je $i+1, moet die $i op regel vijf dan ook geen +1 hebben?
En waarschijnlijk komt dit uit een loopje o.i.d. en dus is die if al een keer geweest, waardoor in $menu[$i] een string zit (want dat doe je bij de if).


Dat had ik ook al vermeld:
Leen schreef op 23.10.2009 21:28:
EDIT:
Volgens mij heb ik het al door. Er gebeurt inderdaad wat in het eerste antwoord staat.
 



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.