将数组从php传递给javascript

时间:2011-05-10 23:01:27

标签: php javascript arrays

您好 我正在尝试将几个数组从php传递给javascript。对于其中一些它是有效的,对其他人则不然。我得到一个文件名数组和一个包含几个文本文件内容的数组。

    <?php
     $album="./images/text_".$benutzerLang."_album1/";
  $fileArray=lsRandom("./images/album1");
  $listTextArray=initTexts($album,$fileArray);
  $falseArray=lsRandom("./images/album2");

  print $listTextArray[0];
  ?>

    <script language="javascript" type="text/javascript">

var filesArray=new Array(5);
var falseArray=new Array(5);
var textListArray=new Array(5);

<?php

$i=0;
foreach($fileArray as $element){
    print 'filesArray['.$i.']="'.$element.'";';

    $i++;
}
$i=0;
foreach($falseArray as $element){
    print 'falseArray['.$i.']="'.$element.'";';
    $i++;
}
$i=0;
foreach($listTextArray as $element){
    print 'textListArray['.$i.']="'.$element.'";';
    $i++;
}

?>

function createText(){//...
        </script>
    <?php



    function lsRandom($foldername){
   $files = array();
   $returnFiles=array();
   $indexes=array();
   $currentPath=getcwd();

   chdir($foldername);
       // Get the all files and folders in the given directory.
   $files = glob("*", GLOB_BRACE + GLOB_MARK);
   $indexes=(array_rand($files,5));
   shuffle($indexes);
   foreach($indexes as $in){
    $returnFiles[$in]=$files[$in];
   }

   chdir($currentPath);
   return $returnFiles;
    }

    function getFileText($fileName,$path){
   $filePath=''.$path.''.$fileName.'';
   //$file=fopen($filePath,'r');
   //$text=fread($file,filesize($filePath));
   $text=file_get_contents($filePath,false);
   return $text;
    }

    function initTexts($album, $images){
   $textArray1=array();
   $i=0;
   foreach($images as $im){
    $nameArray=explode(".",$im);
    $textName=''.$nameArray[0].'.txt';
    $textArray1[$i]=getFileText($textName, $album);
    $i++;
   }
   return $textArray1;
    }


    ?>

问题是$ listTextArray。在第8行,我可以打印整个数组$ listTextArray,其中包含一些小文本文件的内容,并且它可以工作。但是在'foreach - 循环'中进一步向下。它不再起作用了。一旦我在第二个php块中使用变量$ listTextArray,我的其余PHP代码就不再执行了。我不知道为什么它无法在该部分访问$ listTextArray。因为其他数组$ fileArray和$ falseArray没有问题。

3 个答案:

答案 0 :(得分:3)

一些一般性建议:

  1. 如果没有错误消息,很难解决此类问题。如果没有打印错误,您可以查看名为php.logerror.loghttpd.log的文件,或询问您的服务器管理员。
  2. 尝试在阵列上使用print_r(),看看它们的结构有何不同。例如,在PHP中设置数组之后:

    print_r($fileArray);
    print_r($listTextArray);
    print_r($falseArray);
    
  3. 不是通过循环构造JS数组,而是尝试使用内置的json_encode()函数。这既简化了PHP代码,又可能在出现问题时产生更多有用的错误消息:

    var filesArray=<?php json_encode($fileArray) ?>;
    var falseArray=<?php json_encode($falseArray) ?>;
    var textListArray=<?php json_encode($listTextArray) ?>;
    

答案 1 :(得分:1)

你发起

var textListArray=new Array(5);

但尝试使用

listTextArray

使用相同的名称,一切都会好的

答案 2 :(得分:1)

问题已经解决了。请改用json_encode

print('filesArray = '.json_encode($filesArray));

请注意json_encode 要求您的数据是utf8编码的。但无论如何你应该这样做。