Avatar billede websafe Nybegynder
01. april 2004 - 10:46 Der er 2 kommentarer og
1 løsning

Finde sidste index i et array?

Jeg har ledt i PHP's API efter en måde at finde ud af, hvor stort et givet array er, men det nærmeste jeg har kunnet komme det er count() og sizeof(), som returnerer antallet af elementer, og ikke hvor stort arrayet er.

Følgende kode går kun op til plads 5 (index nr. 4) - og det er forkert, idet jeg vil have den til at udskrive 8 som sidste værdi:

$strings[0]= "hello";
$strings[1]= "mm";
$strings[2]= " ";
$strings[3]= "in";
$strings[4]= "my";
$strings[6] = "world";
$strings[7] = "";
$strings[8] = "godaw";
$index= 0;
while (next($strings)!=false||next($strings)==""||next($strings)==" ")
    { echo 'index er: '.$index;
    $index++;
    }

http://www.codejack.com/DesktopDefault.aspx?tabid=31&PostID=734 er der angivet 2 mulige løsninger:
løsning 1)
@strings = ("hello", "world");
$size = @strings;
print ($size);

løsning 2)
@strings=("hello","world");
print scalar @strings;

- men de giver parse errors... Er der noget jeg har overset?

Den bedste løsning ville være en af PHP's metoder, der kunne finde sidste index, men en anden løsning vil helt sikkert også gå an - bare det virker :-)
Avatar billede limemedia Nybegynder
01. april 2004 - 10:59 #1
Dét giver ikke rigtig mening at have array elementer der indeholder intet - kan du ikke ved populering af arrayet undersøge om der reelt er indhold i værdien ? evt gennem
if (trim($var)) $strings[] = $var;

Så vil du ved fortløbende index numre i arrayet kunne anvende
$size = sizeof($strings);
Ref : http://dk.php.net/sizeof

mens hvis dine indexnumre ikke er fortløbende, kan du anvende
$size = sizeof(array_keys($strings));
Ref : http://dk.php.net/array_keys

Hvis du absolut insisterer på at have tomme felter i dit array, vil du kunne sammentælle med følgende kode (som dog vil være væsentligt langsommere end ovenstående)

$size = 0;
if (is_array($strings) && sizeof($strings)) {
    reset($strings);
    while (list($k,$v) = each($strings)) {
        if (trim($v)) $size++;
    }
}

Ref : http://dk.php.net/each
Avatar billede websafe Nybegynder
01. april 2004 - 11:32 #2
Lars, du får points :-)
Jeg har dog rettet din kode lidt til, idet if (trim($v))-statementet i din kode sørger for at tomme felter i arrayet ikke bliver talt med, hvilket de gerne skulle:
$size = 0;
if (is_array($strings) && sizeof($strings)) {
    reset($strings);
    while (list($k,$v) = each($strings)) {
        if (trim($v)) $size++;
    }
}

Derfor må den rigtige kode, hvor også tomme felter tælles med i størrelsen, være:
$size = 0;
if (is_array($strings) && sizeof($strings)) {
    reset($strings);
    while (list($k,$v) = each($strings)) {
        $size++;
    }
}

Tak for hjælpen :-)
Avatar billede limemedia Nybegynder
01. april 2004 - 11:38 #3
hvis tomme felter skal tælles med, virker sizeof($strings) også
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester