Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: array ongelma

Sivun loppuun

peg [06.04.2006 15:49:40]

#

Miten saisin tulostettua ensin aakkosjärjestykseen $r1 ja sitten suuruus järjestykseen $ti, nyt järjestys tulee aina
$c1 mukaan joka on .txt tiedostossa ensimmäisenä. Kiitos
neuvoista...nöyrimmin.

   $tiedot = explode("|", $viestit[$i], 9);

   //erotellaan tiedot omiin muuttujiinsa
	$ti = $tiedot[7];
	$r1 = $tiedot[5];
	$c1 = $tiedot[1];
	$rat = $tiedot[2];
	$seu = $tiedot[3];
	$hev = $tiedot[4];
	$aika = $tiedot[6];
	$br = $tiedot[8];

$tul = " $ti $hev $rat $seu $c1 $r1 $aika $br ";
//sort($tul, 7);
   echo " $tul ";

T.M. [06.04.2006 15:53:25]

#

sort($tiedot) ton exploden jälkeen, ei siis toista parametria, en tiedä mitä tuo 7 tekee, mutta epäilen että tekee mitään, 0-3 taitaa olla noitten fläggien arvot.

peg [06.04.2006 17:11:27]

#

ei toimi, siis ensin järjestetään $r1 aakkosiin ja sitten $ti numerot suuruus järjestykseen.

Olga [06.04.2006 17:55:41]

#

Tuolta oppia: https://www.php.net/array_multisort

peg [06.04.2006 20:59:13]

#

Joo, mutta kun on tyhmä niin ei osaa.

ajv [06.04.2006 22:11:05]

#

Tuolta Olgan antaman linkin takaa kolmas esimerkki on lähes suora ratkaisu ongelmaasi.
Teet vain tuon taulukkosi muotoon:

$data[$i]['ti'] = $tiedot[7];
$data[$i]['r1'] = $tiedot[5];
$data[$i]['c1'] = $tiedot[1];
//jne

Edit. pikku säätöä taulukon kanssa

peg [07.04.2006 10:20:16]

#

No tein noin ja kokeilin vaikka mitä, tulostaa tiedot, mutta järjestys ei toimi

   $tiedot = explode("|", $viestit[$i], 9);

   //erotellaan tiedot omiin muuttujiinsa
$data[$i]['ti'] = $tiedot[7];  // tämä toiseksi suuruus järjestykseen
$data[$i]['r1'] = $tiedot[5];  // tämä ensin aakkosjärjestykseen
$data[$i]['c1'] = $tiedot[1];
$data[$i]['rat'] = $tiedot[2];
$data[$i]['seu'] = $tiedot[3];
$data[$i]['hev'] = $tiedot[4];
$data[$i]['aika'] = $tiedot[6];
$data[$i]['br'] = $tiedot[8];

$tul = " $tiedot[7] $tiedot[5] $tiedot[1]  $tiedot[3]  $tiedot[2]  $tiedot[4]  $tiedot[6]  $tiedot[8] "; // tämä toimii
   echo " $tul ";

ajv [07.04.2006 11:35:06]

#

Missä kohtaa sulla on se array_multisort()?

Edit. Eikun tipuin jo kärryiltä... Mitähän yrität siis nyt oikein tehdä? Miksei tuo echo $tul muka toimi? Ota noi muuttujat pois merkkijonon sisältä, niin sitten pitäs ainakin toimia. No, nyt pitää kiiruhtaa jo kouluun... Kevään viimenen tentti - toivottavasti jopa elämäni ;)

peg [07.04.2006 12:05:59]

#

Warning: array_multisort(): Argument #1 is expected to be an array or a sort flag in d:\serveri\eho\ilmot\jaana.php on line 34
6343134411 poni 70 cm e e e 06.04.06 11:50
$tiedot = explode("|", $viestit[$i], 9);

//erotellaan tiedot omiin muuttujiinsa
$data[$i]['ti'] = $tiedot[7]; // tämä toiseksi suuruus järjestykseen
$data[$i]['r1'] = $tiedot[5]; // tämä ensin aakkosjärjestykseen
$data[$i]['c1'] = $tiedot[1];
$data[$i]['rat'] = $tiedot[2];
$data[$i]['seu'] = $tiedot[3];
$data[$i]['hev'] = $tiedot[4];
$data[$i]['aika'] = $tiedot[6];
$data[$i]['br'] = $tiedot[8];

array_multisort($tiedot[7], SORT_NUM, $tiedot[5], SORT_ASC, $data);

$tul = " $tiedot[7] $tiedot[5] $tiedot[1] $tiedot[3] $tiedot[2] $tiedot[4] $tiedot[6] $tiedot[8] "; // tämä toimii
echo " $tul ";

folio [07.04.2006 13:20:29]

#

Et tainnut edes lukea tuota manuaalisivua =/

Mutta siis multisort järjestää jonkun taulukon jonkun toisen taulukon/taulukoiden mukaan. Eli nuo tiedot minkä mukaan haluat järjestyksen suoritettavan pitää ensin laittaa johonkin toiseen taulukkoon, tämän voi tehdä monellakin eri tavalla mutta tässä yksi nopeasti kasattu esimerkki.

Järjestää tiedoston ensin pisteiden ja sitten nimen mukaan, tiedosto muotoa id|nimi|pisteet.

$dataarray = $pointsarray = $namesarray = array();

$data = file('array_multisort.dat');

foreach( $data as $datarow ) {
  $datarow       = explode('|', $datarow);
  $dataarray[]   = $datarow;
  $pointsarray[] = $datarow[2];
  $namesarray[]  = $datarow[1];
}

array_multisort($pointsarray, SORT_NUMERIC, SORT_DESC,
                $namesarray,  SORT_STRING,  SORT_ASC,
                $dataarray);

foreach( $dataarray as $datarow ) {
  echo "{$datarow[1]} ( {$datarow[2]} pistettä )<br />";
}

Tuosta ei luulisi olevan kovin vaikeaa muokata haluamaasi mutta kysy ihmeessä jos ei ota onnistuaakseen.

ajv [07.04.2006 13:24:02]

#

No siis, tossa oletettavasti on vain osa koodistasi? Ajat tuota jonkun loopin sisällä. Voisin arvata, että käyt tuossa jotain tekstitiedostoa läpi?

Pointti on se, että ensin muodostat sen taulukon ja vasta sen loopin jälkeen kun taulukko on muodostettu, ajat sen array_multisort():in läpi. Ja mitä tuohon virheilmoitukseen tulee, niin siitä käy aika selkeesti myös ilmi, mikä sulla tuossa on ongelmana: ensimmäinen argumentti ei ole taulukko. Ja ei olekkaan, $tiedot[7] on taulukon alkio, $tiedot on se taulukko. Mutta et tuolla $tiedot-taulukon avulla kuitenkaan sitä $data-taulukkoa pysty järjestämään, vaan sitä varten sinun on tehtävä erilliset taulukot. Katso tuota manuaalin esimerkkiä vielä kerran. Siinä se on mielestäni niin rautalangasta väännetty, että turhaan sitä täällä enää uudestaan selittää.

Edit: Hidas

Ai niin ja olenhan kirjoittanut myös koodivinkin tekstitiedoston tietojen listauksesta ja järjestämisestä.

peg [07.04.2006 18:19:38]

#

Hei ja sorry kaikille, hyvistä neuvoista. Olen kuitenkin niin alussa tässä PHP:ssä etten tajunnut kuinka monimutkainen juttu tää onkin, jätetään tää tältä erää ja palataan myöhemmin kun opettelen ensin noita yksinkertaisempia juttuja.


Sivun alkuun

Vastaus

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

Tietoa sivustosta