Передайте массив PHP функции JavaScript

Я пытаюсь получить переменную массива PHP в переменной JavaScript.

Это мой код:

<html> <head> <script type="text/javascript"> function drawChart(row,day,week,month,date) { // Some code... } </script> </head> <body> <?php for($counter = 0; $counter<count($au); $counter++) { switch($au[$counter]->id) { case pageID.'/insights/page_active_users/day': $day[] = $au[$counter]->value; break; case pageID.'/insights/page_active_users/week': $week[] = $au[$counter]->value; break; case pageID.'/insights/page_active_users/month': $month[] = $au[$counter]->value; break; } } ?> <script> drawChart(600/50, '<?php echo $day; ?>', '<?php echo $week; ?>', '<?php echo $month; ?>', '<?php echo createDatesArray(cal_days_in_month(CAL_GREGORIAN, date('m',strtotime('-1 day')), date('Y',strtotime('-1 day')))); ?>'); </script> </body> </html> 

Я не могу получить значение массива PHP.

Как исправить эту проблему?

Solutions Collecting From Web of "Передайте массив PHP функции JavaScript"

Используйте JSON .

В следующем примере $php_variable может быть любой переменной PHP.

 <script type="text/javascript"> var obj = <?php echo json_encode($php_variable); ?>; </script> 

В вашем коде вы можете использовать следующее:

 drawChart(600/50, <?php echo json_encode($day); ?>, ...) 

В случаях, когда вам нужно разобрать объект из строки JSON (например, в запросе AJAX), безопасный способ – использовать JSON.parse(..) как JSON.parse(..) ниже:

 var s = "<JSON-String>"; var obj = JSON.parse(s); 

вы можете преобразовать php-массивы в javascript, используя функцию json_encode () * php

 <?php $phpArray = array( 0 => "Mon", 1 => "Tue", 2 => "Wed", 3 => "Thu", 4 => "Fri", 5 => "Sat", 6 => "Sun", ) ?> <script type="text/javascript"> var jArray= <?php echo json_encode($phpArray ); ?>; for(var i=0;i<6;i++){ alert(jArray[i]); } </script> 

Для передачи данных между двумя платформами необходим общий формат данных. JSON – это общий глобальный формат для отправки данных с кросс-платформой.

 drawChart(600/50, JSON.parse('<?php echo json_encode($day); ?>'), JSON.parse('<?php echo json_encode($week); ?>'), JSON.parse('<?php echo json_encode($month); ?>'), JSON.parse('<?php echo json_encode(createDatesArray(cal_days_in_month(CAL_GREGORIAN, date('m',strtotime('-1 day')), date('Y',strtotime('-1 day'))))); ?>')) 

Это ответ на ваш вопрос. Ответ может выглядеть очень сложным. Вы можете увидеть простой пример, описывающий связь между сервером и клиентской стороной здесь

 $employee = array( "employee_id" => 10011, "Name" => "Nathan", "Skills" => array( "analyzing", "documentation" => array( "desktop", "mobile" ) ) ); 

Преобразование в формат JSON требуется для отправки данных обратно в клиентское приложение, то есть JavaScript. PHP имеет встроенную функцию json_encode (), которая может конвертировать любые данные в формат JSON. Результатом функции json_encode будет строка, подобная этой.

 { "employee_id": 10011, "Name": "Nathan", "Skills": { "0": "analyzing", "documentation": [ "desktop", "mobile" ] } } 

На стороне клиента функция успеха получит строку JSON. Javascript также имеет функцию JSON parsing JSON.parse (), которая может преобразовать строку обратно в объект JSON.

 $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: "employee.php", async: false, cache: false, data: { employee_id: 10011 }, success: function (jsonString) { var employeeData = JSON.parse(jsonString); // employeeData variable contains employee array. }); 

В следующем примере у вас есть массив PHP, а затем сначала создайте массив JavaScript массивом PHP:

 <script type="javascript"> day = new Array(<?php echo implode(',', $day); ?>); week = new Array(<?php echo implode(',',$week); ?>); month = new Array(<?php echo implode(',',$month); ?>); <!-- Then pass it to the JavaScript function: --> drawChart(<?php echo count($day); ?>, day, week, month); </script>