qualitum logo
Vektorer
Som jag nämnt tidigare så är vektorn en variabeltyp. Vektorer fungerar dock lite annorlunda än vanliga variabler och det är därför som jag tar upp dem i ett separat kapitel.

I en variabel kan du enkelt lagra ett värde, men var händer om du vill hantera större mängder data på ett smidigt sätt? Att skapa en mängd enskilda variabler är givetvis möjligt, men inte realistiskt. Att samla alla värden i en och samma variabel hade varit det smidigaste, och visst, det är precis vad en vektor gör.

De olika värdena lagras i något som kallas element. Antalet element i en vektor är antalet värden som den innehåller. Ett element innehåller dels dess värde men också någonting som kallas en nyckel (ett annat ord för nycklar är index). Nyckeln använder du för och specificera vilket värde du vill jobba med. Som standard används heltalsnycklar med noll (0) som startnyckel men det går också att använda strängnycklar.

Detta kapitel kommer att använda sig av olika slingor för att komma åt värden i de vektorerna som vi skapar, slingor har jag ännu inte gått igenom här i skolan och det kan därför vara bättre att spara detta kapitel tills du läst om slingor. Vet du hur slingor fungerar, eller köper koden som den är det bara att fortsätta att läsa.

Tilldelning och åtkomst

Det finns olika sätt att ge en vektor sina värden, följaktligen också olika sätt att komma åt dessa värden. Det hela beror också på om man ger vektorn heltalsnycklar eller strängnycklar. Jag går därför igenom detta var för sig.

Heltalsnycklar

Jag börjar med och visa lite olika sätt att göra själva tilldelningen på.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor1[] = 'värde1'
4:
$vektor1[] = 'värde2';
5:
$vektor1[] = 'värde3';
6:
$vektor1[] = 'värde4';
7:
 
8:
?>

Detta kommer att skapa en vektor med fyra element (nycklarna 0, 1, 2, 3). Värdena den innehåller är "värde1", "värde2", "värde3" samt "värde4". Hur vet då PHP vilka nycklar den skall ge till vilka värden? I exemplet ovan ser du att jag tilldelar med hjälp av en tom hackparentes ([]), det visar för PHP att den själv får välja index och då blir det enligt PHP's standard.

Precis samma vektor hade vi fått genom att köra följande kod.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor1 = array('värde1''värde2''värde3''värde4');
4:
 
5:
?>

Här använder jag mig av språkkonstruktionen array() för att skapa vår vektor (array är engelskans ord för vektor). Eftersom vi inte heller här ger PHP någon information om vilka index jag vill ha ger det oss en vektor i standardutförande.

Att vektorer börjar med nyckeln noll (0) kallas att de är nollbaserade. Men om vi inte vill ha en nollbaserad vektor? Om vi vill att första elementet skall ha nyckeln ett (1)? Nedan visas två exempel på hur man åstadkommer detta.

Exempel

PHP:
1:
<?php
2:
 
3:
/* Först genom hakparenteser */
4:
$vektor2[1] = 'värde1'
5:
$vektor2[]  = 'värde2';
6:
$vektor2[]  = 'värde3';
7:
$vektor2[]  = 'värde4';
8:
 
9:
/* Sedan genom språkkonstruktionen array() */
10:
$vektor2 = array(=> 'värde1''värde2''värde3''värde4');
11:
 
12:
?>

Du ser i exemplen ovan att vi endast behöver ange nyckeln till det första elementet. PHP lägger sedan resten av värdena i element med nycklar efter denna. Nycklar till vektorerna ovan är alltså 1, 2, 3 samt 4. Tänk på detta när du blandar explicit tilldelning med obestämd tilldelning.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor3[15] = 'värde1'
4:
$vektor3[30] = 'värde2';
5:
$vektor3[45] = 'värde3';
6:
$vektor3[60] = 'värde4';
7:
$vektor3[]   'värde5'// Får index 61  
8:
 
9:
?>

Den första obestämda nyckeln blir alltså ett högre än det tidigare högsta i samma vektor.

Hur plockar man då ut data ur en vektor? Skall man endast åt ett eller två element du vet nycklarna på är det enkelt.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor1[] = 'värde1'
4:
$vektor1[] = 'värde2';
5:
$vektor1[] = 'värde3';
6:
$vektor1[] = 'värde4';
7:
 
8:
echo $vektor1[1] . '<br />' $vektor1[3]; 
9:
 
10:
?>

Du skriver först namnet på den vektor det rör sig om, inklusive hakparentes. I hakparentesen skriver du sedan elementets nyckel. Exemplet ovan är körbart, testa det därför gärna för att se resultatet av körningen.

Man kan också gå igenom alla element i en vektor. Man brukar säga att man loopar igenom den. Det är här som vi behöver använda oss av slingor. Det finns lite olika slingor att använda. I PHP används foreach-slingan mest flitigt. Den är smidig eftersom du inte behöver veta antalet element, eller vilka dess nycklar är för att köra den. För ett exempel på hur foreach används se avsnittet om strängnycklar. Nedan presenterar jag en annan metod att lista de olika elementen i en vektor, via for-slingan. Här måste dock vektorn du itererar dig igenom vara en helttalsvektor. Nycklarna måste också vara i en rak följd.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor1[] = 'värde1'
4:
$vektor1[] = 'värde2';
5:
$vektor1[] = 'värde3';
6:
$vektor1[] = 'värde4';
7:
 
8:
/* Vi måste veta antalet element för och kunna använda for-slingan 
9:
   count() är en inbyggd funktion som 
10:
   ger antalet element på en vektor */
11:
 
12:
$antal count($vektor1); 
13:
 
14:
for ($i 0$i<$antal$i++) {
15:
    echo $i ' : ' $vektor1[$i] . '<br />'
16:
}
17:
 
18:
?>

Som sagt, kan du ingenting om slingor är det nog läge att gå tillbaka till detta exemplet efter att du läst igenom kapitlet om dem.

Strängnycklar

I avsnittet ovan fick du lära dig hur du skapar och sedan tar fram värden ur vektorer med heltalsnycklar. Här kommer vi att titta på vektorer med strängnycklar. Skillnaden är inte stor, det skiljer sig givetvis lite vid själva tilldelningen, vid åtkomst kan du inte heller använda for-slingan utan måste ta till en slinga som kallas foreach. Jag börjar med att visa ett exempel på hur du kan skapa en vektor med strängnycklar.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor4['a'] = 'värde1'
4:
$vektor4['b'] = 'värde2';
5:
$vektor4['c'] = 'värde3';
6:
$vektor4['d'] = 'värde4';
7:
 
8:
?>

Du har nu alltså skapat en vektor med nycklarna a, b, c samt d. Värdena på dess element är samma som i exemplen med heltalsnycklar. Givetvis kan du också använda array() konstruktionen.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor4 = array('a' => 'värde1''b' => 'värde2''c' => 'värde3''d' => 'värde4'); 
4:
 
5:
?>

Denna vektor är identisk med den förra $vektor4.

För att komma åt element i en vektor skapad med strängnycklar måste du använda dig av en slinga som heter foreach. Med hjälp av foreach kan du gå igenom din vektor element efter element, det som är smidigt med just denna slingan är att du på förhand inte behöver veta hur många element den innehåller. Jag visar nedan användningen med hjälp av ett exempel.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor4 = array('a' => 'värde1''b' => 'värde2''c' => 'värde3''d' => 'värde4'); 
4:
 
5:
foreach ($vektor4 as $nyckel => $varde) {
6:
    echo $nyckel ' : ' $varde '<br />'
7:
}
8:
 
9:
?>

Detta skriver ut $vektor4 till din webbläsare, med både nycklar och värden på elementen. Om du endast är ute efter värdena kan du förenkla foreach konstruktionen.

Exempel

PHP:
1:
<?php
2:
 
3:
$vektor4 = array('a' => 'värde1''b' => 'värde2''c' => 'värde3''d' => 'värde4'); 
4:
 
5:
foreach ($vektor4 as $varde) {
6:
    echo $varde '<br />'
7:
}
8:
 
9:
?>


Flerdimensionella vektorer

De vektorer vi tittat på hittills har endast innehållit skalära värden (alltså heltal, flyttal och strängar), ja vi har faktiskt bara använt oss av strängvärden. Ett vektorselement kan dock innehålla ytterligare en vektor. Man säger då att vektorn blir flerdimensionell.

Exempel

PHP:
1:
<?php
2:
 
3:
$kontinenter = array(
4:
'Europa' => array ('Sverige''Danmark''Norge'), 
5:
'Asien' => array ('Kina''Japan''Indonesien')
6:
);
7:
 
8:
?>

Vad hände nu i exemplet ovan? Jo, se det som såhär – den första array() konstruktionen skapar en vektor med två element. De har nycklarna 'Europa' och 'Asien'. Testa och skriv ut något av dessa element på samma sätt som vi tidigare skrev ut enstaka element. Gör du detta kommer du få utskriften Array (engelska för vektor). Elementet innehåller alltså en vektor och inte som tidigare en sträng. Elementer 'Europa' innehåller en vektor med elementen 'Sverige', 'Danmark' och 'Norge', elementer 'Asien' innehåller en vektor med elementen 'Kina', 'Japan' och 'Indonesien'. Ingenting hade hindrat något av dessa element från och i sin tur innehålla en vektor, djupet på den flerdimensionella vektorn är alltså obegränsat.

Hur kommer man då åt dessa värden? För och lyckas med detta på ett enkelt sätt måste man veta djupet på vektorn och sedan nästla ett antal slingor som jobbar sig ner genom vektorn.

Exempel

PHP:
1:
<?php
2:
 
3:
$kontinenter = array(
4:
'Europa' => array ('Sverige''Danmark''Norge'), 
5:
'Asien' => array ('Kina''Japan''Indonesien')
6:
);
7:
 
8:
foreach ($kontinenter as $nyckel1 => $varde1) {
9:
    echo $nyckel1 '<br />'
10:
 
11:
    foreach ($kontinenter[$nyckel1] as $varde2) {
12:
        echo "t$varde2"
13:
    }
14:
}
15:
 
16:
?>
Kapitel 5 av 8
[ 1 2 3 4 5 6 7 8 ]
Välkommen Anonymous
Logga in
Registrera
Snabblänkar
Markera alla forum som lästa
Skriptarkivet [86 av 97]
Visa nya inlägg
Visa dina inlägg
Visa obesvarade huvudinlägg
Läs vår skola
  Introduktion
  Programmera i webbmiljö
  Installationen i Windows
  Variabler och konstanter
  Vektorer
  Operatorer
  Villkorssatser
  Slingor
Statistik
Registrerade medlemmar: 19359
Inlägg totalt: 715244
Senaste medlem: NewYork
Online
Besökare just nu: 12,
1 registrerad,
0 dolda och
11 gäster
Besökare som mest var 337 den 2007-07-16 20:05

Våra medlemmar
Inloggade medlemmar
Bra att veta
Förhållningsregler
Trivselregler
phpBB-FAQ
För dig som vill länka
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic
qualitum logo