Forum » Izdelava spletišč » php array sortiranje
php array sortiranje
petzup ::
Potrebujem pomoč okoli sortiranja array in sicer trenutno sortira array z-a kar pomeni da bodo fajli, ki jih izpisujejo pod neko kategorijo rasporejeni od novejšega proti starejšem ampak problem je tudi ker mi te "kategorije" rasporeja od z-a želel bi pa da kategorije rasporedi od a-z medtem, kot fajle od kategorije rasporedi od višjega proti nižjem, ker so fajli poimenovani, primer elektro_13_11, elektro_13_10, elektro_12_10....
Koda:
Izpis zgleda trenutno tako
Koda:
krsort($list); foreach($list as $file=>$time){ $file_url = BASE_URL . $path . $file; $category = explode("_",$file); if($categoryType !== $category[0]){ if($i % 3 == 0){ echo '<tr>'; } echo '<td width="170" style="vertical-align: top;">'; $categoryType = $category[0]; echo '<div class="naslov">'. ucfirst($category[0]) . '</div>'; $i++; echo'<ul class="nav_accordian" id="'.$i.'">'; } if (stripos($file, $category[0]) !== false) { #echo '<br/><a target="_blank" href="'.$file_url.'" title="'.string_replace($file).'">' .string_replace($file).'</a> <small>(' . date('d-m-Y' ,$time) . ')</small>'; echo '<li><a target="_blank" href="'.$file_url.'" title="'.string_replace($file).'">' .string_replace($file).'</a></li>'; continue; echo '</ul></td>'; } }
Izpis zgleda trenutno tako
- spremenilo: petzup ()
drola ::
Za sortiranje uporabi uksort(). Tej funkciji kot argument dodaš svojo funkcijo, ki primerja 2 niza. Napiši tako funkcijo, ki loči najprej kategorijo od datuma. Če sta kategoriji $a in $b enaki, primerja po datumih, če pa sta različni, primerja po kategorijah. Dva niza primerjaš s pomočjo strcmp(). Če hočeš obratni vrstni red, rezultat iz strcmp() pomnožiš z -1.
https://drola.si
petzup ::
Zdejle trenutno sem naredil to, da sem nafilal kategorije v posebni array, ki ga potem porabim pri izpisu posameznih fajlov, amapak ni mi čisto jasno kako bi potem te kategorije z arraya prenesel v foreach zanko, ki izpisuje drugi array?
function getCategory($path){ $dir = opendir($path); $categoryList = array(); while($file = readdir($dir)){ if ($file != '.' and $file != 'Thumbs.db' and $file != '..'){ $category = explode("_",$file); if($categoryType !== $category[0]){ $categoryType = $category[0]; $categoryList[] = ucfirst($category[0]); } } } return $categoryList; closedir($dir); }
drola ::
Ena opcija je, da prebereš datoteke v takle array:
To narediš s tole kodo:
Ko uspeš datoteko prebrati v tako strukturo, potem narediš:
$podatki = array( 'Trata' => array( 'trata_01_01' => 823132, 'trata_05_01' => 231231, ... ), 'Pge' => array( 'pge_78_23' => 323232, ... ) ... );
To narediš s tole kodo:
$podatki = array(); $dir = opendir($path); while($file = readdir($dir)){ if ($file != '.' and $file != 'Thumbs.db' and $file != '..'){ $category = explode("_",$file); $categoryType = ucfirst($category[0]); if(!isset($podatki[$categoryType])) { $podatki[$categoryType] = array(); } $podatki[$categoryType][$file] = $time; //ne vem točno od kje si pobiral ta podatek.... if($categoryType !== $category[0]){ $categoryType = $category[0]; $categoryList[] = ucfirst($category[0]); } } } closedir($dir);
Ko uspeš datoteko prebrati v tako strukturo, potem narediš:
ksort($podatki); foreach($podatki as $ime_kategorije => $datoteke) { krsort($datoteke); //Na tem mestu izpiši kodo za okvirček za posamezno kategorijo foreach($datoteke as $ime_datoteke => $timestamp) { echo '<li>'.$ime_datoteke.'</li>'; } }
https://drola.si
petzup ::
Ima kdo idejo kako naj bi array zgledal da dobim nekakšen takšen izpis:
a
b
c
- d
- e
f
- g
- h
x
y
itd...
Torej rad bi imel neke parente in pod določenimi parenti childe, kot neko drevo.
a
b
c
- d
- e
f
- g
- h
x
y
itd...
Torej rad bi imel neke parente in pod določenimi parenti childe, kot neko drevo.
Zgodovina sprememb…
- spremenilo: petzup ()
petzup ::
Zopet rabil malo pomoči, prilagam najprej kodo:
Zdej zadeva načeloma dela, se pravi izpiše izpiše menije glede na array, zadeva je naslednja doseči želim da bo njegov "glavni" označen če je eden od podmenija označen, sicer stvar deluje pravilno če so imena fajlov recimo primer_1, primer_2 itd...se pravi da je ena beseda iz glavnega nivoja uporabljena v podnivoju oziroma v podmenuju določi lepo class="izbrano" v primeru da imam pa vsak fajel drugače preimenovan pa ne bo.
Kakšna je rešitev sploh okoli tega? Sam študiram da bi nekako mogel preverit če se v tem tem arayu kjer je glavni podmenu 1 nahaja podmenu 1.1 naj podmenu 1 nastavi class="active" ampak nimam pojma na kakšen način bi to dosegel. Upam da bo razumljivo, če ne lahko tudi nekam na server stvar naložim pa da se v živo vidi.
$menuji = Array( // posamezni menu Array('naslov' => 'glavni menu 1','link' => 'index.html'), // vgnezdeni menu z podmenuji Array( // glavni menu 'naslov' => 'podmenu 1','link' => 'podmenu.html','podmenu' => Array( // podmenuji Array('naslov' => 'podmenu 1.1', 'link' => 'a.html'), Array('naslov' => 'podmenu 1.2', 'link' => 'b.html'), ), ), // konec vgnezdenega menuja ); function izdelajDrevoMenu($menuji){ $izpis .= "\n" . '<ul>' . "\n"; foreach ($menuji as $menu){ $izbranoNaslovna = (strpos($_SERVER['PHP_SELF'], str_replace('.html','.php',$menu['link']))) ? $izbranoNaslovna = 'class="active"' : null; $izbrano = (strpos($_SERVER["REQUEST_URI"],str_replace('.html','',$menu['link']))) ? $izbrano = ' class="active"' : $izbranoNaslovna; $izpis .= '<li'.$izbrano.'><a href="'.$menu['link'].'"/>' . $menu['naslov'] . '</a>'; if(!empty($menu['podmenu'])){ // kličem še enkrat funkcijo in delam podmenije $izpis .= izdelajDrevoMenu($menu['podmenu']) . "\n"; } $izpis .= '</li>' . "\n"; } $izpis .= '</ul>' . "\n"; return $izpis; }
Zdej zadeva načeloma dela, se pravi izpiše izpiše menije glede na array, zadeva je naslednja doseči želim da bo njegov "glavni" označen če je eden od podmenija označen, sicer stvar deluje pravilno če so imena fajlov recimo primer_1, primer_2 itd...se pravi da je ena beseda iz glavnega nivoja uporabljena v podnivoju oziroma v podmenuju določi lepo class="izbrano" v primeru da imam pa vsak fajel drugače preimenovan pa ne bo.
Kakšna je rešitev sploh okoli tega? Sam študiram da bi nekako mogel preverit če se v tem tem arayu kjer je glavni podmenu 1 nahaja podmenu 1.1 naj podmenu 1 nastavi class="active" ampak nimam pojma na kakšen način bi to dosegel. Upam da bo razumljivo, če ne lahko tudi nekam na server stvar naložim pa da se v živo vidi.
Mesar ::
Kompliciraš. Zakaj sploh hardcodas menije? Narediš tabelo (id, parent_id, menu_item) nafilaš noter podatke in izpisuješ rekurzivno pa po možnosti tako, da narediš samo en query v DB.
Tudi če boš vztrajal pri tvoji rešitvi, vseeno rabiš vedeti kateri sin je aktiven, da lahko očetu določiš pravi class, ali pa kateri je oče aktivnega sina... samo pri 3rd, 4th, ... tier boš že imel hudo zmedo.
Načeloma če imaš pri vsakem elementu ID in ID očeta lahko dobiš IDje pri aktivnem otroku vse do vrhnjega očeta.
Tudi če boš vztrajal pri tvoji rešitvi, vseeno rabiš vedeti kateri sin je aktiven, da lahko očetu določiš pravi class, ali pa kateri je oče aktivnega sina... samo pri 3rd, 4th, ... tier boš že imel hudo zmedo.
Načeloma če imaš pri vsakem elementu ID in ID očeta lahko dobiš IDje pri aktivnem otroku vse do vrhnjega očeta.
Your turn to burn!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Php pomočOddelek: Programiranje | 1957 (1390) | Dober dan |
» | izpisovanje datotek in sortiranjeOddelek: Programiranje | 781 (603) | cobrica |
» | [Android]GridView vprasanjeOddelek: Programiranje | 935 (816) | KernelPanic |
» | [PHP]Zajem podatkov iz bazeOddelek: Programiranje | 4028 (3665) | cobrica |
» | EXIF - izpis podatkov o sliki v PHP ju?Oddelek: Programiranje | 1826 (1562) | Cokolesnik |