передача массива с php на javascript

Привет, я пытаюсь передать несколько массивов с 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-loop». Он больше не работает. Как только я использую переменную $ listTextArray во втором блоке php, остальная часть моего php-кода больше не выполняется. Я не знаю, почему он не может получить доступ к $ listTextArray в этой части. Потому что это не проблема с другими массивами $ fileArray и $ falseArray.

Некоторые общие рекомендации:

  1. Трудно устранить эту проблему без сообщения об ошибке. Если ошибка не печатается там, где вы ее видите, найдите файлы с именем php.log , error.log или httpd.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) ?>; 

вы начинаете

 var textListArray=new Array(5); 

но попытайтесь использовать

 listTextArray 

Используйте одно и то же имя, и все будет в порядке

Проблема уже решена для вас. Вместо этого используйте json_encode .

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

Обратите внимание, что json_encode требует, чтобы ваши данные были закодированы utf8. Но вы все равно должны это сделать.