您好 我正在尝试将几个数组从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没有问题。
答案 0 :(得分:3)
一些一般性建议:
php.log
,error.log
或httpd.log
的文件,或询问您的服务器管理员。尝试在阵列上使用print_r()
,看看它们的结构有何不同。例如,在PHP中设置数组之后:
print_r($fileArray);
print_r($listTextArray);
print_r($falseArray);
不是通过循环构造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编码的。但无论如何你应该这样做。