/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Tælle array
Fra : Gearløs


Dato : 21-12-06 12:56

Hej gruppe

Jeg har et array der fx ser således ud:
værdi_noget
<tom>
værdi_noget_andet
<tom>
<tom>
<tom>

Nå vil jeg gerne have det talt, exclusiv de _sidste_ tomme værdier, men
inklusiv det i midten. Dvs. resultatet i dette tilfælde skal blive 3.
Hvordan gør jeg det?

Mange julehilsner,
~Mathias



 
 
Johan Holst Nielsen (21-12-2006)
Kommentar
Fra : Johan Holst Nielsen


Dato : 21-12-06 13:26

Gearløs wrote:
> Hej gruppe
>
> Jeg har et array der fx ser således ud:
> værdi_noget
> <tom>
> værdi_noget_andet
> <tom>
> <tom>
> <tom>
>
> Nå vil jeg gerne have det talt, exclusiv de _sidste_ tomme værdier, men
> inklusiv det i midten. Dvs. resultatet i dette tilfælde skal blive 3.
> Hvordan gør jeg det?

<?php
//array ligger i $mitArray

$antalPoster = sizeof($mitArray);
$mitArray = array_reverse($mitArray);
foreach($mitArray as $a) {
if(!empty($a)) { break; }
$antalPoster--;
}

echo "Der er ".$antalPoster." i array'et";
?>

Mvh
Johan

?>

Bertel Lund Hansen (21-12-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-12-06 14:03

Johan Holst Nielsen skrev:

> <?php
> //array ligger i $mitArray
>
> $antalPoster = sizeof($mitArray);
> $mitArray = array_reverse($mitArray);
> foreach($mitArray as $a) {
> if(!empty($a)) { break; }
> $antalPoster--;
> }
>
> echo "Der er ".$antalPoster." i array'et";
> ?>

Din løsning er okay, men lidt bagvendt.

$antalPoster = sizeof($mitArray);
while (!empty($mitArray[$antalPoster-1])) --$antalPoster;
echo "Der er ".$antalPoster." i array'et";

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Gearløs (21-12-2006)
Kommentar
Fra : Gearløs


Dato : 21-12-06 15:01

Jeg takker mange gange for svarene!

Bertel, du mener vel:
while (empty($mitArray[$antalPoster-1])) --$antalPoster;

og ikke:
while (!empty($mitArray[$antalPoster-1])) --$antalPoster;
?

Vernligst,
Mathias



Arne Feldborg (21-12-2006)
Kommentar
Fra : Arne Feldborg


Dato : 21-12-06 15:39

"Gearløs" <baggadapFJERN_DETTE@hotmail.com> skrev Thu, 21 Dec 2006
15:00:34 +0100

>Jeg takker mange gange for svarene!
>
>Bertel, du mener vel:
>while (empty($mitArray[$antalPoster-1])) --$antalPoster;
>
Det er Johns løsning der er den rigtige, den giver det rigtige svar også
ved andre længder af arrayet og ved andre antal af henholdsvis tommer og
udfyldte poster




--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Bertel Lund Hansen (21-12-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-12-06 15:53

Arne Feldborg skrev:

> Det er Johns løsning der er den rigtige, den giver det rigtige svar også
> ved andre længder af arrayet og ved andre antal af henholdsvis tommer og
> udfyldte poster

Jeg havde lavet en logisk fejl, men du antyder at min metode ikke
vil virke under ændrede betingelser. Den er imidlertid lige så
stabil som Johns, og den laver ingen reverse af hele arrayet.

Foreach er ganske god til at lave overskuelig kode, men faktisk
laver den en kopi af det element den bearbejder. Det undgår man
også med min direkte metode. Så jeg forstår ikke at du kalder
Johns for *den* rigtige.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Nezar Nielsen (21-12-2006)
Kommentar
Fra : Nezar Nielsen


Dato : 21-12-06 17:19

Bertel Lund Hansen wrote:
>>Det er Johns løsning der er den rigtige, den giver det rigtige svar også
...
> stabil som Johns, og den laver ingen reverse af hele arrayet.
...
> Johns for *den* rigtige.

Hvorfor bliver I ved med at kalde ham John, haha?

--
Mvh. Nezar Nielsen
Barnerøv.

Arne Feldborg (21-12-2006)
Kommentar
Fra : Arne Feldborg


Dato : 21-12-06 17:23

Bertel Lund Hansen <unospamo@lundhansen.dk> skrev Thu, 21 Dec 2006
15:52:50 +0100


>Foreach er ganske god til at lave overskuelig kode, men faktisk
>laver den en kopi af det element den bearbejder. Det undgår man
>også med min direkte metode. Så jeg forstår ikke at du kalder
>Johns for *den* rigtige.
>
Fordi din regner forkert - simpelthen.

Eller også har du misforstået spørgsmålet.

--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Bertel Lund Hansen (21-12-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-12-06 17:47

Arne Feldborg skrev:

> Fordi din regner forkert - simpelthen.

Det må du gerne forklare.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Arne Feldborg (21-12-2006)
Kommentar
Fra : Arne Feldborg


Dato : 21-12-06 18:25

Bertel Lund Hansen <unospamo@lundhansen.dk> skrev Thu, 21 Dec 2006
17:46:45 +0100


>> Fordi din regner forkert - simpelthen.
>
>Det må du gerne forklare.
>
Der var en fejl der gjorde, at while lykken ikke talte korrekt ned.

Det er givetvis en fejl der er sket da jeg kopierede over fra dit indlæg
og til min editor - jeg beklager meget.

Bortset fra den første udgave (med det forkert anbragte "!") har du
givetvis ret i, at dit forslag virker lige så godt som Johans.


--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Bertel Lund Hansen (21-12-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-12-06 19:14

Arne Feldborg skrev:

> Bortset fra den første udgave (med det forkert anbragte "!") har du
> givetvis ret i, at dit forslag virker lige så godt som Johans.

Jeg testede lige hastigheder med en sammenligning mellem foreach
og for+tæller. Hastighedsmålinger på en webserver skal tages med
et stort forbehold, men det giver alligevel en idé.

Jeg brugte et array med 1550 elementer (linjer på ca. 60 tegn).
Hvis jeg gennemløb det 800 gange, tog det ca. 4 sekunder. Løkken
med "foreach" var lidt hurtigere (½ - 1 sekund).

Min konklusion er at medmindre man har ret voldsomme datamængder,
så kan man roligt vælge ud fra hvad der giver den mest logiske
kode uden at spekulere på hastighed.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Bertel Lund Hansen (21-12-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-12-06 19:20

Bertel Lund Hansen skrev:

> Jeg testede lige hastigheder ...

PS. Det var et banalt gennemløb - ikke noget med reverse af
array'et.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Bertel Lund Hansen (21-12-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-12-06 15:50

Gearløs skrev:

> Bertel, du mener vel:
> while (empty($mitArray[$antalPoster-1])) --$antalPoster;

Ja.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste