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ö ) )
Todella sekava koodi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.