12. januar 2004 - 22:49Der er
16 kommentarer og 1 løsning
hjælp med arrays
Jeg prøver at lave et array ved navn "kunder" som indeholder to underarrays "firma" og "adresse". Jeg vil så gemme den data jeg henter fra db'en i "kunder" arrayet, således at firmanavnet bliver gemt i underarrayet "firma" osv. Selv om jeg ikke helt forstår hvordan det skal gøres, har jeg forsøgt mig med nedenstående:
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Skal jeg så bare selv beholde dem? Under alle omstændigheder skal du have mange tak for hjælpen.
Synes godt om
Slettet bruger
13. januar 2004 - 02:32#5
Erik: Hvorfor vil du (og andre) så gerne sætte variablen til et tomt array inden tildeling med tomme klammer? Jeg er nysgerrig, for det er helt unødvendigt.
sandbox: Unødvendigt? Hvis du vil lave ugyldig kode, så JA! ;)
Men sagen er den, at $kunder = array(); opretter variablen, og samtidig tildeler den til et tomt array.
Hvis du udelod denne linie, vil det altså betyde at du ved den første $kunder[], prøver at ændre en array som ikke eksistere - eller med andre ord, du prøver at ændre på "null".
At PHP så "godtager" at man skriver det, er desværre den side af sagen. For du vil hurtigt kunne se en "fejl", hvis du slår error og warnings til (ergo udviklingsmiljø).
Men du kan godt undlade at "declare" variablen, og lade PHP'en lege "gætteleg".
For at skære det lidt ud i pap, og sige det på en anden måde - du vil jo heller ikke kunne hælde lidt (ekstra) vand i en kop eller et glas, hvis du ikke har sådan ét allerede?! ;)
Jeg vil gerne medgive at det er god etik altid at definere sine variabler først, men det giver nu ingen notice eller warning, hvis man undlader det i dette tilfælde.
detox: Åbenbart ikke lige ang. arrays - men i alle andre tilfælde plejer den. Men må vel være en "bug" at PHP'en ikke laver en warning.
Men ja - er god etik / programmeringsskik, at definere sine variabler - om det er nødvendigt eller ej.
Synes godt om
Slettet bruger
13. januar 2004 - 05:18#9
Det er kun hvis man prøver at udlæse en værdi fra en udefineret variabel, at man får en fejl.
I PHP definerer man jo netop en variabel (og dermed også et array) ved at putte noget i den, og når man siger $kunder[]=et-eller-andet bliver den også defineret som et array med den tildelte værdi på første ledige plads.
Kan du komme på eksempler, hvor PHP smider en warning, hvis man putter noget i en udefineret variabel? Jeg kan ikke (men jeg har heller ikke ligefrem ledt efter det).
Når jeg laver kode, har jeg altid error_reporting(E_ALL); i toppen indtil jeg ved skidtet virker.
Forresten er jeg lige kommet i tanker om en gyldig grund til at definere den som et tomt array først. Det er dog mest en bekvemmelighedsgrund. Så behøver man nemlig ikke checke for eksistensen af arrayet for det tilfælde, at der ikke skulle være nogen matchende kunder, før man laver en
foreach($kunder as $kunde){ echo $kunde['firma']; echo $kunde['adresse']; }
PHP springer nemlig glad og fro hen over den foreach, når $kunder bare er et tomt array. (Det samme sker med Eriks for-løkke.)
sandbox: Eksempel kunne være så enkelte ting som (hvis de ikke er foruddefinerede): $count++; $str .= "123";
Mht. foreach, vil denne også være bedre i det tidl. eksempel. Men eftersom den anden virker, så undlod jeg at kommentere det.
Ang. $kunder[], uden foruddefinering, der kan det lade sig gøre uden fejl - men er dårlig skik! Som er hoppe over hvor gærdet er lavest ;-)
Synes godt om
Slettet bruger
13. januar 2004 - 05:49#11
stingbat: Begge dine eksempler er jo nogle, der i princippet modificerer det allerede eksisterende indhold af variablen. Det vil sige, at de skal læse indholdet, og det giver PHP naturligvis en kommentar med på vejen, hvis error_reporting er sat til det.
Jeg sad lige og afprøvede forskellige kombinationer:
$row=""; $row[]='hej'; // Giver ikke så meget som en notice
$row='hej'; $row[]='hej'; // Giver Fatal error: [] operator not supported for strings
Jeg havde faktisk forventet at den første mindst ville give en Notice, da jeg jo havde tildelt variablen en (godt nok tom) streng.
sandbox: Nu siger du jo selv "allerede eksisterende indhold af variablen" - for i princippet, ændre du jo også på indholdet vha. [].
Dette kan selvfølgelig diskuteres for og imod. Men fakta er, at man bør nu erklære sine variabler. Samtidig ved PHP også på forhånd HVAD type den enkelte variabel er, til det videre forløb.
Mht. til dine eksempler, så viser det jo ligeledes, at det er lidt buggy, den måde som PHP opfatter variabeltyperne på. For i teorien burde BEGGE fejle, eftersom du prøver at ændre en tekststreng (også selvom den er tom) ved at indsætte et array.
Så med andre ord - kan godt være at det i praktisk virker, men teoretisk og etisk set, er det forkert / giver fejl!
Synes godt om
Slettet bruger
13. januar 2004 - 06:23#13
OK, jeg vil indrømme, at det nok er mest korrekt at erklære som et (eventuelt tomt) array først. Jeg skal prøve at huske det, når jeg laver nye scripts.
Men ligefrem at kalde undladelsen "etisk forkert" er nok lidt overdrevet ;-)
Det er ikke bare "mest korrekt" at oprette arrayet først med
$kunder=array();
det er det eneste korrekte. Hvis der ikke er tupler i resultatet fra SELECTen, vil det efterfølgende ikke være et array, og diverse ting kan gå galt, fx når man bruger funktioner, der forventer et array (array_pop - og andre).
Derudover garderer det mod dumme programmeringsfejl, hvis der fx allerede står noget arrayet, fx fordi man allerede har brugt det til noget.
erikjacobsen: Præcis - fik dog ikke lige præciseret den del ;-) Men ender hurtigt galt ja, hvis man ikke erklærer...
sandbox: Ved ikke om det er så meget "overdrevet" - prøv at arbejde lidt med C/C++, og så finder du nok hurtigt ud af hvad der er rigtigt og forkert. At du i C/C++ ikke kan undgå at erklære din variabler, er så en anden side af sagen *G*
Men altså - som sagt, man kan også hoppe over hvor gærdet er lavest - men hvis du ikke hopper højt nok, får du nok lidt ondt *av* Eller script-mæssigt, hvis du som "erikjacobsen" rigtigt nok fortalte, ikke har nogen rækker i tabellen, findes variablen ikke, og en fejl opstår.
Har ikke været online de sidste par dage. Skal nok lukke nu :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.