Avatar billede tipman Juniormester
21. oktober 2022 - 10:18 Der er 6 kommentarer

PHP loop array fejl

Jeg har et $arr. Jeg looper genne dette array og udfører kode, når værdien i næste array value ændrer sig fra forrige værdi:
$i=0;
while($i<count($arr)){
  if($arr[$i]!==$arr[$i-1]){
    Noget kode her
  }
  $i++;
}

Problemet er i PHP8, at der kommer fejl da $arr[$i-1] ikke er defineret, når $i er 0.
Er der en måde at lave dette på, som ikke giver denne fejl i PHP8? Jeg kan jo lave en if sætning, når $i==0 og overnstående for kode for $i>0, men det er ikke særligt elegant.
Avatar billede acore Ekspert
21. oktober 2022 - 11:20 #1
Kan du ikke bare starte med

$i=1;

Hvs "noget" skal gøres for i=0, kan du lægge det uden for dit loop
Avatar billede tipman Juniormester
21. oktober 2022 - 11:39 #2
Det er bare ikke en elegant løsning at skulle lave speciel kode for i=0
Avatar billede acore Ekspert
21. oktober 2022 - 12:29 #3
Hvis det kode, der skal køres, er meningsfuld for i=0, kan du erstatte

if($arr[$i]!==$arr[$i-1]){

med

if($i=0 || $arr[$i]!==$arr[$i-1]){
Avatar billede arne_v Ekspert
21. oktober 2022 - 16:28 #4
Der er forskellige måder at løse det på.

Men det er værd at bemærke at koden altid har været defekt. PHP 8 har ikke ændret betydningen af koden. PHP 8 har kun ændret niveauet for beskeden omkring problemet fra Notice til Warning.
Avatar billede arne_v Ekspert
21. oktober 2022 - 17:41 #5
Løsningen i #3 er vel den mest elegante hvis det er den ønskede logik.

Jeg har ofte brugt logikken:

$last_value = SOME_INVALID_VALUE;
et  loop typisk while men kunne også være for {
    if($current_value != $last_value) {
          do something
          $last_value = $current_value;
    }
}
Avatar billede Rune1983 Ekspert
24. oktober 2022 - 11:17 #6
Jeg har brugt denne form for opbygning. Fungere fint efter mit hoved.

for ($index = 0; $index < count($Arr); $index++) {
    if( isset($Arr[$index]) ){
        // Array data fundet.
        // Udfør kode
       
    }else{
        // Ingen array data
    }
}
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