|
| 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 (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 (21-12-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 21-12-06 15:50 |
| | |
|
|