FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
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. ![]() |
|||
![]() |
![]() |
Ämnesverktyg | |
Visningsalternativ | |
|
|