Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Arrayssa olevien tietojen järjestäminen

pistemies [08.10.2011 13:16:45]

#

Tein ihan ajan kuluksi tällaisen funktion, jolla saa arrayissa olevia nimiä tai lauseita aakkosjärjestykseen ja jokaiselle aakkosen kirjaimelle luodaan oma array.
Argumentit:
1. Tavallinen array.
2. Moniulotteinen array.
3. Jos arrayn arvot korvataan: Array, jossa on arrayn avainten nimet. Muutoin tämän voi jättää tyhjäksi.
4. Luku 1 tai suurempi: Korvataan edellinen arvo uudella. Jos ei korvata, argumenttia ei tarvitse määritellä.

<?php
function arrays_add_keys_sort($array,$array2,$keys="",$e=0){
    # jos arrayn avaimia ei ole määritelty, luodaan avaimia lisättävien arrayiden verran
   if(!$keys && $e == 0){
  	  $x1=1;
  	  $keys = array();
  	  for($i<=0;$i<count($array2);$i++){

  	    array_push($keys,$x1);
  	    $x1++;
  	  }
  	 }
    if(!$keys && $e > 0){
       exit("Virhe: Muokattavia arvoja ei ole määritelty.");
    }

	     function mix($arr,$arr2,$b,$e){
           # arrayn loppuosa lisätään array2:een
	       # jos korvataan edellinen arvo (e=1), sitä($b) ei lisätä muistiin
		   if($e > 0) $w = $b+1; else $w = $b;

		     for($i=$w;$i<count($arr);$i++){
		                array_push($arr2,$arr[$i]);
		      }
		       array_splice($arr,$b,count($arr2)-1,$arr2);
		       return $arr;
	    }
    # käännetään arrayt takaperin, aloitetaan muokkaus takimmaisesta arvosta
   $keys = array_reverse($keys);
   $array2 = array_reverse($array2);
	           # laitetaan kaikki samaan arrayhyn
		   for($i=0;$i<count($keys);$i++){
		    $array = mix($array,$array2[$i],$keys[$i],$e);
		   }
                   # laitetaan aakkosjärjestykseen
		   natcasesort($array);
                   # koska arrayn avaimet ei ole järjestyksessä, poimitaan ne ylös
		   $k = array_keys($array);

                   # luodaan valmiiksi array, jossa avaimena on alkukirjain
		   $chr = array();
		   for($i=0;$i<count($k);$i++){
		     if(!array_key_exists($array[$k[$i]][0],$chr)){
		       $chr[strtoupper($array[$k[$i]][0])] = array();
		     }
		   }
   # lisätään arrayn arvot aakkosjärjestyksen mukaisiin arrayhin.
   for($i=0;$i<count($array);$i++){
     array_push($chr[ucwords($array[$k[$i]][0])],$array[$k[$i]]);
   }

  return $chr;
}
?>

Funktion käyttö.

<?php
$eka =array(
    0 => "Matti",
    1 => "Asko",
    2 => "Jouni",
    3 => "Seppo",
    4 => "Vuokko",
    5 => "Aulis",
    6 => "Paavo",
    7 => "hannu",
    8 => "Eino",
    9 => "Oiva",
    10=> "Teppo",
    11=> "Arja",
    12=> "Senja",
    13=> "Keijo",
    14=> "Rauni");
$toka = array(
    0 => array("Taavi","Eija","Yrjö"),
    1 => array("Tauno","Pentti","Liisa"),
    2 => array("Sirpa","Väinö"),
    3 => array("Irma","Ilpo","Niina"));

 /* Vaihtoehtoisena, jos arrayn arvo halutaan paloitella osiin ja korvata uusilla tiedoilla, poimitaan arrayn
 muokattavien arvojen avaimet. Tällöin keys-arrayn pituus ja arvot tulee vastata niitä korvaavien
toka-arrayssa olevien arvojen eli arrayiden määrää.

  $keys = array();

  for($i=0;$i<count($eka);$i++){
   $eka[$i] = trim($eka[$i]);

	   if(strpos($eka[$i]," ",1)){
		   array_push($keys,$i);
	   }
  }

   $eka = arrays_add_keys_sort($eka,$toka,$keys,1);

*/

    $eka = arrays_add_keys_sort($eka,$toka);
?>

Esimerkin mukaiset arrayt tämä järjestää seuraavasti:

Array
(
    [A] => Array
        (
            [0] => Arja
            [1] => Asko
            [2] => Aulis
        )

    [E] => Array
        (
            [0] => Eija
            [1] => Eino
        )

    [H] => Array
        (
            [0] => hannu
        )

    [I] => Array
        (
            [0] => Ilpo
            [1] => Irma
        )

    [J] => Array
        (
            [0] => Jouni
        )

    [K] => Array
        (
            [0] => Keijo
        )

    [L] => Array
        (
            [0] => Liisa
        )

    [M] => Array
        (
            [0] => Matti
        )

    [N] => Array
        (
            [0] => Niina
        )

    [O] => Array
        (
            [0] => Oiva
        )

    [P] => Array
        (
            [0] => Paavo
            [1] => Pentti
        )

    [R] => Array
        (
            [0] => Rauni
        )

    [S] => Array
        (
            [0] => Senja
            [1] => Seppo
            [2] => Sirpa
        )

    [T] => Array
        (
            [0] => Taavi
            [1] => Tauno
            [2] => Teppo
        )

    [V] => Array
        (
            [0] => Vuokko
            [1] => Väinö
        )

    [Y] => Array
        (
            [0] => Yrjö
        )

)

Metabolix [14.11.2011 22:41:07]

#

Todella sekava koodi.

Vastaus

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

Tietoa sivustosta