Jump to content
php.lv forumi

Pirms kāda laika atmetu - nu ir problēmas


Lokomotive

Recommended Posts

Sveiki,

 

Es atzīstos, ka ļoti sen neesmu ķēpājies ar php, tāpēc no jauna sāk parādīties stulbas kļūdu problēmas.

ceru, ka varēsiet izpalīdzēt.

 

Doma tāda:

 

Direktorija "raksti" satur citas direktorijas kuras ir nosauktas pēc datumiem.. respektīvi "2004.07.31", "2004.08.01" utt. - katrā no šīm 'datumu direktorijām' ir intro.txt un start.jpg faili.

Savukārt php koda uzdevums ir izdrukāt tabulas, kas izskatītos apmēram šādi:

prob.jpg

 

..kā redziet, bildes un datumi tiek drukāti pareizi, bet vidējās kolumnas katrā nākamajā rindā teksti (teksti no intro.txt failiem) summējas.

Kas par lietu?

 

KODS iR sheit:

<?php

if ($handle = opendir('raksti')) {
  while (false !== ($raksts = readdir($handle))) {
      if ($raksts != "." && $raksts != "..") {
   
/////////////////////////////////////// probleemas saakums///
    $path = "raksti/".$raksts."/intro.txt";
  
 $fails = file($path);
 foreach($fails as $vertiba ) {
 $vertiba = preg_replace("/\n/", "<br>", $vertiba);
  $intro_teksts .= "$vertiba";
 }
 //return $intro_teksts;
////////////////////////////////////////// problemas beigas ///
  $intro_bilde = $raksts."/start.jpg";
      echo "
   <tr>
   <td width='476' height='100' valign='top'><table width='100%' border='0' cellpadding='0' cellspacing='0' class='raksti_bot'>
    <!--DWLayoutTable-->
    <tr>
     <td width='100' height='100' align='center' valign='middle' class='raksti_both_ver'><img src='raksti/".$intro_bilde."' width='90' height='90'></td>
   <td width='10'> </td>
   <td width='281' valign='top'><br>
    ".$intro_teksts."<br></td>
  <td width='10'> </td>
   <td width='75' align='center' valign='middle' class='raksti_both_ver'>".$raksts."</td>
    </tr>
   </table></td>
   </tr>
   \n<br>"; 
      }
  }
  closedir($handle);
}

?>

 

Direktoriju koks vareetu izskatiities shaadi:

 

raksti

__2004.07.31

______intro.txt

______start.jpg

__2004.08.01

______start.jpg

______intro.txt

 

Liels, liels paldies par atsaucību!

Romans

Edited by Lokomotive
Link to comment
Share on other sites

Nu tapeec ka ir $intro_teksts .= "$vertiba";

 

Un paarejot pie naakoshaa faila tu sho mainiigo neiztuksho liidz ar to kraajas galaa..

 

Vajadzeetu:

unset($intro_teksts);

    }
 }
 closedir($handle);

 

Bet vispaar shiii koda dalja ir diezgan nejeedziiga:

   $path = "raksti/".$raksts."/intro.txt";
 
$fails = file($path);
foreach($fails as $vertiba ) {
$vertiba = preg_replace("/\n/", "<br>", $vertiba);
 $intro_teksts .= "$vertiba";
}

 

To var novienkaarshot:

$intro_teksts  = nl2br(file_get_contents("raksti/".$raksts."/intro.txt"));

 

tad taalaak nevajag arii neko unsetot..

 

Ja paturpinam tad nav iisti jeegas php paarseet / izvadiit statisku html liidz ar to manupraat var taisiit shaadi:

<?
if ($handle = opendir("raksti")) {
 while (false !== ($raksts = readdir($handle))) {
     if ($raksts != "." && $raksts != "..") {
?>
  <tr>
  <td width="476" height="100" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="0" class="raksti_bot">
   <!--DWLayoutTable-->
   <tr>
    <td width="100" height="100" align="center" valign="middle" class="raksti_both_ver"><img src="raksti/<? echo $raksts; ?>/start.jpg" width="90" height="90"></td>
  <td width="10"> </td>
  <td width="281" valign="top"><br><? 
echo nl2br(file_get_contents("raksti/".$raksts."/intro.txt")); ?><br></td>
 <td width="10"> </td>
  <td width="75" align="center" valign="middle" class="raksti_both_ver"><? echo $raksts; ?></td>
   </tr>
  </table></td>
  </tr>
<? } } 
closedir($handle);
} ?>  

Link to comment
Share on other sites

Roze, saki luudzu, kaa es varu sazorteet tabulas (jaunaakais datums aukshaa), ja datums nav array? .. tas tak laikam nemaz nav iespeejams. vai ne?

Kas tev maisa no sākuma nolasīt visu direktoriju nosaukumus un ieglabāt tos masīvā? Te ir ļoti parocīgi, ka datumus esi saglabājis yyyy.mm.dd veidā. Izmantojot sort($array) vai rsort($array) [reverse sort] kārto masīva elementus augošā/dilstošā secībā.

 

bubu laikam runā par funkciju glob(), vai shell_exec rezultātu pārsešanu.

Link to comment
Share on other sites

Venom, doma par papildus masīva izveidošanu ir ok..

..vienīgi man veel nepielec kāpēc rsort() negrib strādāt, pat ja $key un $value ($raksts => $raksts) ir vienādi.

Pēc manām ziņām rsort() būtu jāzortē pēc $key.

 

$masiivs = array($raksts => $raksts);

rsort($masiivs);

print_r($masiivs);

 

Šajā gadījumā man drukā:

Array ( [0] => 2004.08.11 )

Array ( [0] => 2004.08.31 )

Array ( [0] => 2004.11.07 )

Link to comment
Share on other sites

Venom, paturpinot šo tēmu.. nekādīgi nesaprotu kāpēc masīvu nevar sazortēt pretējā secībā.. nu murgs..

 

Te būs piemēriņš

(iepostoju tikai daļu no koda, lai vieglāk orientēties):

 

$raksts ir iegūts ar readdir($handle) palīdzību.

$raksts_b = array($raksts);
  array_reverse($raksts_b);
  foreach($raksts_b as $raksts_c){
  $datums = $raksts_c;
  }
  print($datums);

 

Tas izdrukā šādi:

2004.08.11

2004.08.31

2004.11.07

.. kaut an vajadzētu šādi:
2004.11.07

2004.08.31

2004.08.11

 

Liels paldies par piedalīšanos šajā.. nezin kā lai to visu nosauc..

Romāns

Edited by Lokomotive
Link to comment
Share on other sites

šis te mani godīgi pārsteida ==> $raksts_b = array($raksts);

$raksts jau pats par sevīm _ir_ masīvs, vai nē?

 

mans uzdevums nav rakstīt kodu tevis vietā, bet gan iedot ideju. Un mana ideja šobrīd iraid, ka tev jāpalasās par masīviem.

 

un tā:

$direktorijas=array();

while($rdir=readdir($dir))

$direktorijas[]=$rdir;

 

unset($direktorijas[array_search('.',$direktorijas)]);

unset($direktorijas[array_search('..',$direktorijas)]);

 

[cut a]

sort($direktorijas);

$direktorijas=array_reverse($direktorijas);

 

while($cur_dir=array_shift($direktorijas))

{

....

$cur_dir=tekoša direkorija

}

[/cut]

 

[cut b]

sort($direktorijas);

while($cur_dir=array_pop($direktorijas))

{ ... }

[/cur]

 

 

 

array_reverse($raksts_b);

foreach($raksts_b as $raksts_c){

$datums = $raksts_c;

}

print($datums);

Edited by Venom
Link to comment
Share on other sites

šis te mani godīgi pārsteida ==> $raksts_b = array($raksts);

$raksts jau pats par sevīm _ir_ masīvs, vai nē?

- Ja godīgi, tad jocīgi, jo manuprāt $raksts NAV masīvs.. vismaz to paskaidro šis teikums, kad pamēģināju reversot $raksts:

 

" Warning: array_reverse(): The argument should be an array "

 

Starp citu, es nemaz neko nejautātu, ja to varētu izlasīt PHP manuālī, kas starp citu ir man datorā *.chm formātā, un ir atvērts praktiski visu laiku, kad plosos pa kodu.

 

Jebkurā gadījumā, liels tev paldies par to, ko darīji manā labā.

Romāns

Link to comment
Share on other sites

Ā, tu gribēji tajā pašā kodā

while (false !== ($raksts = readdir($handle))) {

if ($raksts != "." && $raksts != "..")

{

{ apstrādājam rakstu }

}

iekš tā "if" $raksts pataisīt par masīvu?

 

no sākuma direktorijas "jāuzkrāj" masīvā, kas arī tiek darīts ar

 

$dir=opendir('raksti');//handle

$direktorijas=array();//sagatavojam masīvu

while($rdir=readdir($dir))//kamēr ir item-i

$direktorijas[]=$rdir;//pievienojam pa vienam masīva elementam

Link to comment
Share on other sites

×
×
  • Create New...