[PHP] explode & 'Undefined offset' vraagje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Hey,

Het lijkt me niet zo'n hele moeilijke vraag, maar ik heb tot nu toe niks kunnen vinden. Ik heb ge-google'd, www.php.net/explode en een forumsearch gedaan. Tot heden, niks.
Mijn vraag is volgens mij redelijk simpel:
PHP:
1
list($menu_hoofd, $menu_sub) = explode("_",$menu_ids);

Doe ik. Mijn '$menu_ids' is een string die bestaat uit bijvoorbeeld:
test
test_1
test_2
Dus de ene keer met '_' en vervolg, en de andere keer niks.

Nu krijg ik iedere keer een 'Warning: Undefined offset: 1', omdat '$menu_sub' niet defined is. Hoe kan ik dit op een nette manier omzeilen?

Het is geen ramp, en als ik na het ontwikkelen de 'error_reporting' weer normaal zit kan het wel weg zijn, maar toch wil ik dit een keer oplossen, want ik ben het al vaker tegen gekomen.

Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
hoezo geen @tje bij de explode? als is het netste een strstr op '_' waaraan je kan zien of er wel of geen _ in de string zit :)

Uhm... ja


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 11:40
Zo'n @tje is helemaal niet netjes, fouten moet je nooit onderdrukken, maar netjes 'gebruiken', je kan ze het beste proberen te voorkomen ipv onderdrukken. Heb je een veel beter script mee..

|>


Acties:
  • 0 Henk 'm!

Verwijderd

Als je het meer structureel zou aanpakken kan je bijvoorbeeld ipv 'test' 'test_0'. Als $menu_sub nu 0 is, weet je dat er geen submenu is.

Een andere manier is om er gewoon een if-statement omheen te zetten:
PHP:
1
2
3
4
5
6
7
<?
if(ereg("_", $menu_ids)) {
  list($menu_hoofd, $menu_sub) = explode("_",$menu_ids);
} else {
  $menu_hoofd = $menu_id;
}
?>

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Dankje sKiLL4,
Dat ik daar niet zelf op was gekomen :(

Toch raar dat je de explode(); functie geen argument mee kunt geven dat de velden niet allemaal 'verplicht' zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Een oplossing is vrij eenvoudig. Bouw een if statement en vergelijk of het eerste item van het resultaat van explode() gelijk is aan de string. Zo ja, dan heeft explode() niet "gewerkt", omdat de separator er niet in zat. ereg() is een beetje overkill in dit geval.

[ Voor 25% gewijzigd door Verwijderd op 14-07-2003 15:57 ]


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Neen,
Ik heb wel een string en geen array.

Ik heb dan dus ook geen string waarmee ik iets kan vergelijken...

[ Voor 38% gewijzigd door raps op 14-07-2003 15:35 ]


Acties:
  • 0 Henk 'm!

Verwijderd

raps schreef op 14 July 2003 @ 15:28:
Toch raar dat je de explode(); functie geen argument mee kunt geven dat de velden niet allemaal 'verplicht' zijn.
Je probleem zit niet in het de explode() functie maar in de list() functie. Het enige wat explode doet is de string splitten (split() is sneller btw) en op zijn beurt probeert de list() functie de array-waardes weer om te zetten naar verschillende variabelen. Echter is het aantal parameters van je list verschillend dan het aantal elementen van het array.

[ Voor 7% gewijzigd door Verwijderd op 14-07-2003 15:36 ]


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
bedankt voor de uitleg!

Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
strstr is volgens mij een aardig stuk sneller als ereg.

En simon ik zei ook dat strstr een stuk netter was, maar een @ wel een oplossing zou kunnen zijn :P

Uhm... ja

Pagina: 1