Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Yksinkertainen tapa talukoiden laskennassa

awly [23.01.2011 21:13:06]

#

Lähtökohta:

Array
(
    [6] => 5
    [7] => 2
    [8] => 10
    [13] => 1
    [14] => 2
    [19] => 3
    [20] => 4
    [21] => 3
)

Ohjelmalla on array, jonka arvoilla ei ole mitään väliä. Tarkoituksena olisi laskea peräkkäiset avaimet ja laittaa näistä aivaimista ensimmäisen arvoksi peräkkäisten avaimien määrä. Yllä mainittu esimerkki muuntuu siis muotoon:

Array
(
    [6] => 3
    [13] => 2
    [19] => 3
)

Edit: array_keys() osoittautuu aika ratkaisevaksi funktioksi. Lähtökohta muuttuukin seuraavanlaiseksi:

Array
(
    [1] => 6
    [2] => 7
    [3] => 8
    [4] => 13
    [5] => 14
    [6] => 19
    [7] => 20
    [8] => 21
)

Nyt pitäisi vielä laskea peräkkäiset arvot ja muuntaa tulos oikeaan muotoon.

Grez [23.01.2011 21:48:38]

#

Tästä tulee tietysti mieleen kysymys, että miksi ihmeessä tällainen tehdään. Mutta siis kyllähän sen saa tehtyä. Mikä tuossa tuottaa ongelmaa?

awly [23.01.2011 21:51:36]

#

Grez kirjoitti:

Tästä tulee tietysti mieleen kysymys, että miksi ihmeessä tällainen tehdään. Mutta siis kyllähän sen saa tehtyä. Mikä tuossa tuottaa ongelmaa?

Ongelmaa tuottaa tapa, jolla laskea nuo peräkkäiset arvot. Monien silmukoiden purkkaviritelmät eivät oikein houkuta.

Metabolix [23.01.2011 22:11:04]

#

Onko tämä mielestäsi "monien silmukoiden purkkaviritelmä"?

function muunna($a) {
  $a = array_flip(array_values($a));
  $b = array();
  foreach ($a as $i => $turha) {
    if (!isset($a[$i - 1])) {
      for ($b[$i] = 1; isset($a[$i + $b[$i]]); ++$b[$i]);
    }
  }
  return $b;
}

print_r(muunna(array(1, 2, 3, 11, 12, 21, 22, 23, 24)));

awly [23.01.2011 22:23:05]

#

On tuo minulle. Idean kuitenkin sain tuosta antamastasi ja tein omanlaisen ratkaisun:

$array = array_keys($array);

$array2 = array(0);
for($i = 0; $i < 66; $i++) {
	if(in_array($i,$array)) $array2[$count]++;
	else $count=$i+1;
}

$array2 on uusi array, joka sisältää toivotun ratkaisun.
Luku 65 on suurin mahdollinen avain, jonka $array voisi sisältää. End($array) ei suostunut toimimaan joten läiskäsinpä sen paikalle.

Kiitos kuitenkin avusta. Sain ainakin suunnan miten toteuttaa. :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta