Avatar billede sjh Nybegynder
01. august 2006 - 20:22 Der er 16 kommentarer og
1 løsning

Slet id i array

Hvordan sletter men et "id" i et array så ledes at den får 0, 1, 2, 3 osv.. igen
og ikke 0, 2, 3 osv.. hvis vi sletter (id 1)

  $a[] = array("a0", "b0");
  $a[] = array("a1", "b1");
  $a[] = array("a2", "b2");

  unset($a[1]);

  print_r($a);

Her mangler nr 1:
Array
(
    [0] => Array
        (
            [0] => a0
            [1] => b0
        )

    [2] => Array
        (
            [0] => a2
            [1] => b2
        )

)

Den skal ende sådan:
Array
(
    [0] => Array
        (
            [0] => a0
            [1] => b0
        )

    [1] => Array
        (
            [0] => a2
            [1] => b2
        )

)

Lige nu smider jeg det over i et nyt array:

  foreach($a as $v) {
    $n[] = $v;
  }

  print_r($n);

men kan det ikke laves mere smart så man ikke skal lave et loop..??
Avatar billede pidgeot Nybegynder
01. august 2006 - 20:26 #1
Jeg er ret sikker på det ikke er muligt. Hvis det er for at du kan lave et for-loop igennem det, vil jeg foreslå du i stedet benytter foreach($arr as $key => $value) (eller normal foreach hvis du ikke skal bruge key'en).
Avatar billede pidgeot Nybegynder
01. august 2006 - 20:27 #2
...ikke er muligt = ikke er muligt på anden måde.
Avatar billede pidgeot Nybegynder
01. august 2006 - 20:30 #3
Beklager, kan se nu det er forkert: Du kan køre array_values() på dit gamle array for at få et nyt, re-indekseret array.

http://www.php.net/manual/en/function.array-values.php

Det vil sige $a=array_values($a);
Avatar billede sjh Nybegynder
01. august 2006 - 20:37 #4
JA da var den jo takker.. smid et svar :D
Avatar billede pidgeot Nybegynder
01. august 2006 - 20:38 #5
Værsgo - jeg mener dog stadig du bør overveje at "nøjes" med foreach, men det er jo bare min holdning :)
Avatar billede sjh Nybegynder
01. august 2006 - 20:45 #6
Øhh.. hvorfor foreach?? det må da være langsomt??

Tak for hjælpen..
Avatar billede Slettet bruger
01. august 2006 - 20:45 #7
foreach har til gengæld et par ulemper:

1) Den er langsommere end en for-løkke
2) Den tillader ikke direkte ændring af arrayet
Avatar billede sjh Nybegynder
01. august 2006 - 20:49 #8
Vil det så være bedre sådan ??:

$length = count($a);
for ($i=0; $i <= $length; $i++) {
  $a[$i] = $a[];
}
Avatar billede sjh Nybegynder
01. august 2006 - 20:51 #9
naa det virker sq ikke :D
Avatar billede pidgeot Nybegynder
01. august 2006 - 20:51 #10
Til gengæld kan foreach sikre dig at du rent faktisk kommer igennem alle elementer (ingen fejl fordi du bytter om på < og <=), at du ikke prøver at få fat på elementer der ikke findes, samt bruges med tekst-keys - og bruger man disse, bliver koden ofte mere læselig.
Avatar billede sjh Nybegynder
01. august 2006 - 21:05 #11
øhh.. kan ikke lige se den fejl der skulle komme med array_values()
Avatar billede pidgeot Nybegynder
01. august 2006 - 21:09 #12
Jeg har aldrig sagt der kommer nogen fejl, jeg ville bare ikke bruge den. Du har også fuldstændig ret i der intet er galt hvis man rent faktisk kører den funktion (gør man ikke, ville der jo for dig hvis du bare brugte en for), men det er jo lige med om der er nogen egentlig fordel i sidste ende.
Avatar billede sjh Nybegynder
01. august 2006 - 21:23 #13
Hvad var det så med: (bytter om på < og <=)

Det er noget jeg skal bruge sammen med unserialize() / serialize() en slaks dynamisk database
Avatar billede pidgeot Nybegynder
01. august 2006 - 21:27 #14
Det er med henblik på for-loops - for($i=0;$i<10;$i++) er jo ikke det samme som for($i=0;$i<=10;$i++).
Avatar billede sjh Nybegynder
01. august 2006 - 21:31 #15
når det var FOR som kunne lave fejl.. trode det var array_values() :D
Avatar billede Slettet bruger
01. august 2006 - 23:49 #16
PS. Den fejl, man kan komme til at lave med en for hvor man bytter om på < og <=, lavede du netop i dit indlæg 01/08-2006 20:49:21.

Husk tælleren i et normalt array går fra 0 til antallet af elementer - 1.
Avatar billede sjh Nybegynder
02. august 2006 - 00:51 #17
Ja det er jo det :D
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