Vinnaren i pepparkakshustävlingen!
2022-06-02, 10:03
  #1
Medlem
moohs avatar
Om jag har en helt ny, orörd array, så här:

Kod:
$array = ["v1","v2","v3","v4","v5","v6","v7","v8","v9","v10","v11","v12","v13","v14","v15","v16"];
echo 
current($array);
echo 
key($array); 

så får jag v1, och 0.

Men är det 100% garanterat? Visst, jag skulle kunna sätta en loop runt det hela och köra testa en miljard gånger, och jag skulle säkerligen få v1 och 0 varje gång, men i datorernas mystiska värld så är det fortfarande inte detsamma som 100% säkert.

Jag hittar inget i dokumentationen som uttryckligen säger att arrayens interna pekare alltid står på arrayens första objekt direkt efter skapandet.

Notera att jag inte är ute efter att veta vilken first key ÄR, utan var den interna pekaren står.
__________________
Senast redigerad av mooh 2022-06-02 kl. 10:28. Anledning: Rättar till språket så frågan blir rätt ställd.
Citera
2022-06-02, 10:11
  #2
Medlem
Citat:
Ursprungligen postat av mooh
Jag hittar inget i dokumentationen som uttryckligen säger att arrayens index automatiskt är 0, om man inte gjort något med arrayen.
I ditt fall kommer det alltid vara 0.
Den interna pekaren sätts på det första objektet i arrayen.
Men eftersom du kan manuellt sätta nyckeln (associative array) behöver den första nyckeln i arrayen inte autimatiskt vara "0".
Citera
2022-06-02, 10:12
  #3
Moderator
Siegfrids avatar
Den är först eftersom den står först i definitionen.
Sedan finns det en pointer, eller cursor, som pekar på ett visst element. Och har man inte flyttat pointern så står den på första elementet efter att den blivit återställd eller arrayen skapats.
Citera
2022-06-02, 10:20
  #4
Medlem
moohs avatar
Citat:
Ursprungligen postat av abloodywar
I ditt fall kommer det alltid vara 0.
Den interna pekaren sätts på det första objektet i arrayen.
Men eftersom du kan manuellt sätta nyckeln (associative array) behöver den första nyckeln i arrayen inte autimatiskt vara "0".

Nej, det behöver inte vara just 0, men den kommer stå på första positionen i arrayen, vilket är vad jag ville veta.

Citat:
Ursprungligen postat av Siegfrid
Den är först eftersom den står först i definitionen.
Sedan finns det en pointer, eller cursor, som pekar på ett visst element. Och har man inte flyttat pointern så står den på första elementet efter att den blivit återställd eller arrayen skapats.

Okey, tack för två snabba svar. Direkt efter skapandet av en array så står den interna pekaren på arrayens första objekt. Kalasbra.
__________________
Senast redigerad av mooh 2022-06-02 kl. 10:25.
Citera
2022-12-20, 13:04
  #5
Medlem
GrillTeknikers avatar
Citat:
Ursprungligen postat av mooh
Om jag har en helt ny, orörd array, så här:

Kod:
$array = ["v1","v2","v3","v4","v5","v6","v7","v8","v9","v10","v11","v12","v13","v14","v15","v16"];
echo 
current($array);
echo 
key($array); 

så får jag v1, och 0.

Men är det 100% garanterat? Visst, jag skulle kunna sätta en loop runt det hela och köra testa en miljard gånger, och jag skulle säkerligen få v1 och 0 varje gång, men i datorernas mystiska värld så är det fortfarande inte detsamma som 100% säkert.

Jag hittar inget i dokumentationen som uttryckligen säger att arrayens interna pekare alltid står på arrayens första objekt direkt efter skapandet.

Notera att jag inte är ute efter att veta vilken first key ÄR, utan var den interna pekaren står.

Du skriver att du inte hittar något i dokumentationen - var har du letat egentligen?

https://www.php.net/manual/en/function.current.php

Jag tycker det framgår klart och tydligt:
Citat:
Every array has an internal pointer to its "current" element, which is initialized to the first element inserted into the array.
Citera
2022-12-20, 17:56
  #6
Medlem
PissBusss avatar
Den stora frågan är ju vad TS ska ha det här till.
Citera
2022-12-20, 17:57
  #7
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av mooh
Notera att jag inte är ute efter att veta vilken first key ÄR, utan var den interna pekaren står.
Kolla på det här svaret och fråga dig om du verkligen vill jobba med den interna Array-"pekaren". Varför då i så fall?
https://stackoverflow.com/questions/...rrays-pointers
Citera
2022-12-29, 07:35
  #8
Medlem
moohs avatar
Citat:
Ursprungligen postat av GrillTekniker
Du skriver att du inte hittar något i dokumentationen - var har du letat egentligen?

https://www.php.net/manual/en/function.current.php

Jag tycker det framgår klart och tydligt:

Nu när du säger det så... Jag förstod nog helt enkelt inte den förklaringen, men du har rätt.

Citat:
Ursprungligen postat av PissBuss
Den stora frågan är ju vad TS ska ha det här till.

Ja du, den större frågan är varför man besvarar en fråga med en icke-relevant fråga. Jag behövde svar på frågan. (Och jag FICK ett tillfredställande svar för 6 månader sedan.) Måste du ifrågasätta?
Citera
2022-12-29, 07:49
  #9
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av mooh
Ja du, den större frågan är varför man besvarar en fråga med en icke-relevant fråga. Jag behövde svar på frågan. (Och jag FICK ett tillfredställande svar för 6 månader sedan.) Måste du ifrågasätta?

Det är högst relevant vad du ska ha det till, eftersom det nästan helt säkert finns bättre sätt att förhålla sig till array:er i praktisk tillämpning av PHP.
Citera
2022-12-29, 08:06
  #10
Medlem
moohs avatar
Jag skulle ha det för att ta reda på om jag behövde använda RESET på en array direkt efter det att den har skapats, för att GARANTERAT få arrayens första element om man använde CURRENT.

Kod:
$array = ["a","b","c","d"];
reset($array);
echo 
"första elementet är " current($array); 

Ovanstående kod ger samma resultat oavsett om jag har med reset() eller inte. Men att ANTA att det alltid är 100% garanterat så varje gång är dumt, för man ska inte ANTA saker. Man ska VETA.

Och som GrillTekniker snällt påpekar i sitt svar, så står det på PHP. net att så är fallet, men jag hade missat det.
Citera
2022-12-29, 13:55
  #11
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av mooh
Jag skulle ha det för att ta reda på om jag behövde använda RESET på en array direkt efter det att den har skapats, för att GARANTERAT få arrayens första element om man använde CURRENT.

Kod:
$array = ["a","b","c","d"];
reset($array);
echo 
"första elementet är " current($array); 

Ovanstående kod ger samma resultat oavsett om jag har med reset() eller inte. Men att ANTA att det alltid är 100% garanterat så varje gång är dumt, för man ska inte ANTA saker. Man ska VETA.

Och som GrillTekniker snällt påpekar i sitt svar, så står det på PHP. net att så är fallet, men jag hade missat det.

Okej men det exemplet var inte vad jag efterfrågade, utan jag bad om ett exempel på hur du ska använda det.

Konstruerar du en array sådär vet du ju vilket som är det första elementet, det är $array[0].

I det exemplet behöver du heller inte current(), reset() returnerar värdet ur array:en.

reset()/current()/osv. är nästan helt säket fel verktyg i praktiken. Är det viktigt för din applikationskod var i en array ett värde ligger är array fel datatyp, antagligen bör du använda ett objekt istället och särskilja dina speciella värden från resten. Om det egentligen inte är viktigt så är det map, reduce, filter, array_walk_recursive du bör använda istället, för antagligen håller du på med att göra en dålig, skör återimplementation av någon av dem.

Vill du verkligen ha första elementet och det verkligen är motiverat i din tillämpning, förlita dig inte på looppekaren utan kör bara array_values($array)[0].
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback