Avatar billede heyn Nybegynder
01. juli 2006 - 23:36 Der er 4 kommentarer og
1 løsning

Hvordan 'ryder man op' i et array's nøgler?

Hej Alle

Jeg har et array $arr[]. Det indeholder:

$arr[0] = "Plads 0";
$arr[1] = "Plads 1";
$arr[2] = "Plads 2";
$arr[3] = "Plads 3";

Nu ønsker jeg at fjerne $arr[1], men samtidig skal nøglerne tilpasses så de stadig er fortløbende. Resultatet skal altså være:

$arr[0] = "Plads 0";
$arr[1] = "Plads 2";
$arr[2] = "Plads 3";

Har nogen et forslag?

Mvh Christian
Avatar billede gizmo-gizmo Nybegynder
02. juli 2006 - 00:39 #1
Jeg må indrømme at jeg ikke kender en funktion der gør, men så kan du jo lave en selv:

function reset_keys($ar)
{
  $new = array();
  foreach($ar as $key=>$val) {
    $new[count($new)]=$val;
  }
  return $new;
}

Sådan at det kommer til hedde:

$arr[0] = "Plads 0";
$arr[1] = "Plads 1";
$arr[2] = "Plads 2";
$arr[3] = "Plads 3";

unset($arr[1]);
$arr = reset_keys($arr);
print_r($arr);
Avatar billede heyn Nybegynder
02. juli 2006 - 11:21 #2
Tak skal du have. Den var smart. Har du tænkt på at tilføje den som note i manualen på php.net under array's???
Jeg kunne efter megen søgen ikke finde noget tilsvarende der!

For at ryde HELT op skal man vel skrive

function reset_keys($ar){
  $new = array();
  foreach($ar as $key=>$val) { $new[count($new)]=$val; unset($ar[$key]); }
  return $new;
}

Ellers vil der vel afsættes 'spøgelseshukommelse' i cash'en og det vil vel også spare på processorens interne ram (kan ikke huske navnet på denne).

Sådan principielt...

Eller har jeg misforstået PHP? Man ville gøre det i c++.

Mvh Christian.

P.s. Husk at svare med et SVAR.
Avatar billede gizmo-gizmo Nybegynder
02. juli 2006 - 11:26 #3
Hehe, velbekomme. Jeg tror ikke det er i et problem i PHP overhovedet. Uden at vide det, så vil jeg da gætte på at alt hukommelsen frigives helt efter planen når phpkoden er færdigeksekveret. Men ellers er det da rigtigt, jeg tror bare det er begrænset hvor meget ram sådan et lille array tager mens koden bliver udført :-)
Avatar billede heyn Nybegynder
02. juli 2006 - 12:48 #4
Som jeg skrev: principielt....
Men hvis det er en meget besøgt side er det vigtigt at minimere belastningen af processorens ram mest muligt for at undgå tidstab på genindlæsning af data mest muligt.
Jeg mener det med at skrive til php.
Hvad med at kalde funktionen:

array array_redef_keys ( array input )

Mvh. Christian
Avatar billede terrak Nybegynder
02. juli 2006 - 17:58 #5
Hvis du er meget fokuseret på optimering, så kunne du sætte et lille &-tegn ind foran $arr i funktionen, sådan her:

function reset_keys(&$ar)

Så ville du kun skulle skrive

reset_keys($arr);

og altså undgå

$arr = reset_keys($arr);

Om det vil gå hurtigere ved jeg ikke, men det bruger mindre kode :-)
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