Avaleht
uus teema   vasta Tarkvara »  WWW »  Array failidest mis on kindlas asukohas märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
wiilweer
HV kasutaja
wiilweer

liitunud: 03.03.2008




sõnum 16.03.2011 23:16:56 Array failidest mis on kindlas asukohas vasta tsitaadiga

Tahaks luua mitmedimendsioonilise array, mis koosneks failidest mis asuvad kindlas asukohas. Üritasin midagi koostada loopides üle failinimede ja tulemuse stringi panna aga see ei anna soovitut tulemust, kuna sisse jäävad " \ " mida on vaja kasutada, et saada korralik PHP süntaks.


$dir = opendir('f');
if($dir)
{
   $result = "";
   while (($file = readdir($dir)) !== false )
   {
      if(strpbrk($file, 'mp3'))
      {
         $result = $result ."{ Loo nimi: \"$file\", asukoht: \"f/$file\" },<br/>";
      }
   }
   echo $result;
   
}

Echo prindib küll ilusti enamvähem array välja aga mul oleks vaja see toimetada javascripti variablesse, aga seal jäävad br tagid ja backslashid näha st, et ta ei tööta kui arrayna.
Kommentaarid: 37 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 17.03.2011 00:19:57 vasta tsitaadiga


<script  language="JavaScript">
var nimi = new Array();
var tee = new Array();
<?php
$kaust ="Musa";
$dir = opendir($kaust);
$i=0;
if($dir)
{
   while (($file = readdir($dir)) !== false )
   {
   if(strpbrk($file, 'mp3'))
      {
echo "nimi[".$i."]='".$file."';";
echo "tee[".$i."]='".$kaust."/".$file."';";
$i++;
   }
}

}
?>

alert(nimi[0]);
alert(tee[0]);
</script>

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 17.03.2011 00:25:46 vasta tsitaadiga

PHP skriptis pead echo'ma täpselt sama teksti, mida javascriptis kirjutaksid. Sinna sa ju ei pane br-tage. Reavahetuseks kasuta "\n". Kaldkriipsude probleemist ei saa aru, sest ühtegi "\" sul ei ole ja teistpidi ei tekita probleeme.

E: mõistlikum oleks vist salvestada failinimed tavalisse php array'sse ja siis kasutada json_encode.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiilweer
HV kasutaja
wiilweer

liitunud: 03.03.2008




sõnum 17.03.2011 00:35:49 vasta tsitaadiga

Timukas0, see variant jääb üldsegi ära, sest siis ei teki array vaid üks pikk lause jutumärkide sees mis meenutab array välimust. Uurin hiljem andrusny vastust. Suured tänud vastajatele icon_smile.gif
Kommentaarid: 37 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 17.03.2011 00:45:31 vasta tsitaadiga

Algul ei saanud JS multi array tööle, uurisin veidi tal tuleb ennem kõik pesad defineerida. MultiArray oleks veel soodsam teha vast.

<script  language="JavaScript">
lood = new Array(100)
for (i = 0; i < lood.length; ++ i){
   lood [i] = new Array(2);
}

//var nimi = new Array();
//var tee = new Array();
<?php
$kaust ="Musa";
$dir = opendir($kaust);
$i=0;
if($dir)
{
   while (($file = readdir($dir)) !== false )
   {
   if(strpbrk($file, 'mp3'))
      {
echo "lood[".$i."]['nimi']='".$file."';";
echo "lood[".$i."]['tee']='".$kaust."/".$file."';";
$i++;
   }
}

}
?>

alert(lood[0]['nimi']);
alert(lood[0]['tee']);
</script>

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 17.03.2011 01:01:55 vasta tsitaadiga

wiilweer kirjutas:
Timukas0, see variant jääb üldsegi ära, sest siis ei teki array vaid üks pikk lause jutumärkide sees mis meenutab array välimust. Uurin hiljem andrusny vastust. Suured tänud vastajatele icon_smile.gif

Äkki seletad rohkem "array mitte tekkimist"? Sinu mitmedimensionaalsele array'le vastaks midagi sellist:
php:
  1. <script>
  2. <?php
  3. $failid = array(
  4.     array('nimi' => 'file1.mp3', 'tee' => 'kaust/file.mp3'),
  5.     array('nimi' => 'file2.mp3', 'tee' => 'kaust/file2.mp3')
  6. );
  7. echo "var failid = " .json_encode($failid) . ";";
  8. ?>
  9.  
  10. var esimene = failid[0];
  11. var nimi = esimene.nimi; //või esimene['nimi'] või failid[0].nimi või failid[0]['nimi']
  12. var tee = esimene.tee;
  13. </script>

JSis ei ole lihtsalt assotsiatiivset arrayt, seega ainus võimalus on kasutada objekte (Object). andrusny näites on samuti tegu objektidega.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiilweer
HV kasutaja
wiilweer

liitunud: 03.03.2008




sõnum 17.03.2011 01:55:03 vasta tsitaadiga

Panin manusesse firebug pildi. Nagu näha siis var myvar algab jutumärgiga, millega array siiski ei alga. Muidugi ma pole kaua aega veetnud veebi kirjutamisega , alustasin mingi kuu aega tagasi(javascripti olen puutnud sellest ajast vaid pool) aga ma siiski arvan, et see ei saa olla array, või siiski ?

andrusny meetod aga töötas tõesti paremini kui minu leiutis.
Manus
pilt firebugile
pilt firebugile

Kommentaarid: 37 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 17.03.2011 08:39:48 vasta tsitaadiga

tsitaat:

Äkki seletad rohkem "array mitte tekkimist"?

Paistab, et see json_encode($failid) teeb selle defineerimise juba ise ära.
Kui proovida sisse kirjutada nagu mina tegin
echo "lood[".$i."]['nimi']='".$file."';";

siis ei piisa ainult
var lood = new Array();

peab iga pesa jaoks eraldi array defineerima

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 17.03.2011 12:12:43 vasta tsitaadiga

wiilweer, äkki näitad, kuidas sa kasutad seda, sest kui sa minu näite järgi teeks, siis töötaks kõik kenasti. Terve kood oleks selline:
php:
  1. <script>
  2. <?php
  3. $dir = '.';
  4. $lood = array();
  5. if ($handle = opendir($dir)) {
  6.     while (false !== ($file = readdir($handle))) {
  7.         if (strpbrk($file, 'mp3')) {
  8.             $lood[] = array('nimi' => $file, 'tee' => $dir . '/' . $file);
  9.         }
  10.     }
  11. }
  12. echo 'var lood = ' .json_encode($lood) . ';';
  13. ?>
  14.  
  15. </script>


andrusny lahendus on võrdlemisi kehv. Esiteks annad sa arrayle mingi suvalise suuruse (100). Teiseks ei kasuta sa selle array elemente (lood[0], lood[1]) jne üldse array-na, seega new Array() kasutamine üsna mõttetu ja segadust tekitav. Pigem midagi sellist:
javascript:
  1. var lood = [
  2.     {
  3.         nimi: 'lugu.mp3',
  4.         tee : 'kaust/lugu.mp3'
  5.     },
  6.     {
  7.         nimi: 'lugu2.mp3',
  8.         tee : 'kaust/lugu2.mp3'
  9.     }
  10. ];

või sellist
javascript:
  1. var lood = [];
  2. lood.push({
  3.     nimi: 'lugu.mp3',
  4.     tee : 'kaust/lugu.mp3'
  5. });
  6. lood.push({
  7.     nimi: 'lugu2.mp3',
  8.     tee : 'kaust/lugu2.mp3'
  9. });
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiilweer
HV kasutaja
wiilweer

liitunud: 03.03.2008




sõnum 17.03.2011 12:48:11 vasta tsitaadiga

<?php
$dir = opendir('f');
if($dir)
{
   $result = "";
   while (($file = readdir($dir)) !== false )
   {
      if(strpbrk($file, 'mp3'))
      {
         $result = $result ."{ Loo nimi: \"$file\", asukoht: \"f/$file\" },";
      }
   }
   
}
?>
<script type="text/javascript">
var myvar = <?php echo(json_encode($result)); ?>;
</script>


Kasutasin sellist koodi. Antud kood töötab aga tõesti paremini, aga oleksin kasutaja andrusny koodiga ka vist hakkama saanud, sest hetkel olen tõesti "poisike" sellel alal aga parem on kohe kõige õigem variant meelde jätta.

Arvan, et minu scriptis oli põhiline möödalaskmine stringi tulemuse kirjutamine, mitte array'sse.
Kommentaarid: 37 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 35
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 17.03.2011 13:01:20 vasta tsitaadiga

wiilweer, tee tutvust Javascripti objektidega.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 17.03.2011 13:02:07 vasta tsitaadiga

Põhiline viga on sul array moodustamises.

   if(strpbrk($file, 'mp3'))
      {
         $vahe['nimi'] = $file;
       $vahe['tee'] ="f/$file";
       $result[] = $vahe;
      }


või siis selliselt

   $result = "";
   $i=0;
   while (($file = readdir($dir)) !== false )
   {
      if(strpbrk($file, 'mp3'))
      {
       $result[$i]['nimi'] = $file;
       $result[$i]['tee'] = "f/$file";
       $i++;
      }
   }

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 17.03.2011 13:15:19 vasta tsitaadiga

Infoks siis et json_encode() PHP's tekitabki vaikimisi non-associative array puhul array, associative array puhul objekti.
Ehk siis:
php:
  1. $tabel = array();
  2. $tabel[] = array('asi' => 'ese', 'sasi' => 'sade');
  3. $tabel[] = array('asi' => 'ese2', 'sasi' => 'sade2');
  4. $tabel[] = array('asi' => 'ese3', 'sasi' => 'sade3');
  5. $tabel[] = array('asi' => 'ese4', 'sasi' => 'sade4');
  6. echo "var tabel = ".json_encode($tabel).";";


On Javascriptis ligipääsetav nii:
javascript:
  1. console.log("0 asi: "+tabel[0].asi+" sasi: "+tabel[0].sasi);
  2. console.log("1 asi: "+tabel[1].asi+" sasi: "+tabel[1].sasi);
  3. console.log("2 asi: "+tabel[2].asi+" sasi: "+tabel[2].sasi);
  4. console.log("3 asi: "+tabel[3].asi+" sasi: "+tabel[3].sasi);


Array'st läbi lendamist korraldad juba ise et kuidas seda käidelda soovid.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  Array failidest mis on kindlas asukohas
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.