Hopelijk is er iemand die mij kan helpen.

De code op regel 5 zorgt voor "Fatal error: [] operator not supported for strings in ..."

<?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.
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).
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.
Doe dan eens een [php]var_dump[/php] op $menu[$i] of $menu[$i+1] in die elseif.
Gedaan, dat levert op:

string(8) "Pagina 1" 
string(8) "Pagina 1" 
string(8) "Pagina 1" 
string(8) "Pagina 2" 


Dat is het resultaat van:

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

<?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
Iets inbouwen als:

<?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'];
}

?>
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.
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.
Karl schreef op 29.10.2009 12:39
[quote='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.[/quote]

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

Reageren