» »

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:
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:
$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 ::

Mi je ratalo spedenat, hvala ti!

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.

Zgodovina sprememb…

  • spremenilo: petzup ()

blackbfm ::

recimo tako c = array('d','e')

Zgodovina sprememb…

  • spremenilo: blackbfm ()

petzup ::

Ok sem rešil na malo drugačen način.

petzup ::

Zopet rabil malo pomoči, prilagam najprej kodo:
$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.
Your turn to burn!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Php pomoč

Oddelek: Programiranje
141968 (1401) Dober dan
»

izpisovanje datotek in sortiranje

Oddelek: Programiranje
6787 (609) cobrica
»

[Android]GridView vprasanje

Oddelek: Programiranje
12944 (825) KernelPanic
»

[PHP]Zajem podatkov iz baze

Oddelek: Programiranje
354037 (3674) cobrica
»

EXIF - izpis podatkov o sliki v PHP ju?

Oddelek: Programiranje
121838 (1574) Cokolesnik

Več podobnih tem