Kom ihåg mig?
Home Menu

Menu


Snygg lösning för isset på flerdimensionell array?

 
Ämnesverktyg Visningsalternativ
Oläst 2008-04-11, 21:04 #1
totoos avatar
totoo totoo är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Nov 2006
Inlägg: 730
totoo totoo är inte uppkopplad
Mycket flitig postare
totoos avatar
 
Reg.datum: Nov 2006
Inlägg: 730
Godkväll

Det är en sak jag har stört mig på när jag kodat php och har använt flerdimensionella arrayer där man inte vet alls vilka dimensioner som existerar.


Tänk att vi har en array som ser ut såhär

$arrayen[a][b][c];

Om jag vill veta om ett element i dimensionen c finns så kan jag skriva såhär:

if(isset($arrayen[1][5][0]))

Då vet jag om det finns ett element i dimension c.

Men om dimensionen b inte finns, då får jag en varning på undefined index 5 här (helt logiskt).

Så om jag utan att riskera en vaning ska se om det finns något i dimension c så måste jag kolla b först, alltså såhär:

if(isset($arrayen[1][5]) && isset($arrayen[1][5][0]))

Nu får jag ingen varning om dimension b inte finns, och allt är frid och fröjd.

(man ska även kolla element a på samma sätt, men utelämnar det)

Men om jag har barnsligt många dimensioner, typ 10st så blir denna ifsats sjukligt stor och ful.


Antar att någon känner igen besväret.
Om man skiter i varningar så är detta inget problem, men mina applikationer ger inte en enda varning av principskäl, så den lösningen går bort.

Att ändra koden ska vi heller inte diskutera, för det har inte med frågeställningen att göra.


Frågan är då, finns det något enklare sätt att göra detta? En isset för en array som inte bara tittar på sista dimensionen, utan hela hierarkin på vägen dit.

Egentligen tycker jag att man borde ta för givet att isset kontrollerar på det sättet, men så är det ju inte.


Man skulle kunna göra en funktion som tar arrayen som parameter, sedan en array med index, såhär:

function multiDimIsset($obj, $indices)
{
// nån foreach med indices som använder eval
}

$isset = multiDimIsset($arrayen, array(1,5,0));

och att den tittar allt internt, men om någon känner till en snyggare lösning (som nästan måste finnas) så vill jag se en sådan.
totoo är inte uppkopplad   Svara med citatSvara med citat
 


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 00:55.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017