Avatar billede expnet Seniormester
23. juni 2018 - 14:13 Der er 5 kommentarer

php array samle problem

Hej exp

Jeg prøver at samle mine array fra denne

[0] => Array(
            [0] => C:0
            [1] => Sc:9
            [2] => C:1
            [3] => Sc:2
            [4] => C:0
            [5] => Sc:61
            [6] => C:1
            [7] => Sc:1
            [8] => C:0
            [9] => Sc:3
            [10] => C:1
            [11] => Sc:138
        )
Vil gerne have den til at kunne gøre sådan her efter behanding

[0] => Array(
            [0] => C:0 Sc:9
            [2] => C:1 Sc:2
            [4] => C:0 Sc:61
            [6] => C:1 Sc:1
            [8] => C:0 Sc:3
            [10] => C:1 Sc:138
        )
jeg prøver at finde frem til hvordan jeg kan samle hver anden linje i min array

håber i forstår og evt. kan hjælpe
Avatar billede Slater Ekspert
23. juni 2018 - 14:31 #1
Hurtigt med f.eks.

$ar = [
    'C:0',
    'Sc:9',
    'C:1',
    'Sc:2',
];

$max = count($ar);
$output = [];
for ($i = 0; $i < $max; $i += 2 ) {
    $output[] = $ar[$i] . ' ' . $ar[$i + 1];
}

var_dump($output);


Ligesom en normal for-løkke, men i stedet for $i++ tager den to ad gangen, og lægger $i sammen med $i + 1.

Det vil dog give nogle problemer, hvis du ikke er sikker på at den array altid har et lige antal værdier, eller hvis det er en associative array med forskellige index.
Avatar billede erikjacobsen Ekspert
23. juni 2018 - 14:40 #2
#1: Jeg har en tilsvarende løsning - men læg mærke til at der kun ønskes de lige index-er i resultatet:

  $a[0] = 'C:0';
  $a[1] = 'Sc:9';
  $a[2] = 'C:1';
  $a[3] = 'Sc:2';
  $a[4] = 'C:0';
  $a[5] = 'Sc:61';
  $a[6] = 'C:1';
  $a[7] = 'Sc:1';
  $a[8] = 'C:0';
  $a[9] = 'Sc:3';
  $a[10] = 'C:1';
  $a[11] = 'Sc:138';

  $b = [];
  for ($i=0;$i<count($a)-1;$i=$i+2) {
    $b[$i] = $a[$i].' '.$a[$i+1];
  }

  print_r($b);

som udskriver

Array
(
    [0] => C:0 Sc:9
    [2] => C:1 Sc:2
    [4] => C:0 Sc:61
    [6] => C:1 Sc:1
    [8] => C:0 Sc:3
    [10] => C:1 Sc:138
)
Avatar billede Slater Ekspert
23. juni 2018 - 17:12 #3
#2: Hvordan er det anderledes?
Avatar billede Slater Ekspert
23. juni 2018 - 17:17 #4
Ah, jeg så det lige - der ønskes en associate array som output.

Jeg er ikke klar over om det reelt er et ønske eller bare det nemmeste at skrive, men det er korrekt, det er tættere på spørgsmålet.
Avatar billede arne_v Ekspert
24. juni 2018 - 04:15 #5
Det maa vaere maaden at goere det paa.

Nemt og overskueligt.

Hvis man er til ulaeselig kode kunne man erstatte:


$b = [];
for ($i=0;$i<count($a)-1;$i=$i+2) {
    $b[$i] = $a[$i].' '.$a[$i+1];
}


med:


$b = array_map(function($a1,$a2) { return $a1 . ' ' . $a2; },
              array_filter($a, function($k) { return $k % 2 === 0; }, ARRAY_FILTER_USE_KEY),
              array_filter($a, function($k) { return $k % 2 === 1; }, ARRAY_FILTER_USE_KEY));


:-)
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

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