Я пытаюсь преобразовать массив PHP в массив javascript для datetimepicker jQuery, чтобы отключить некоторые даты. Но я не могу найти правильный ответ в Интернете. Я использую Zend Framework для своего проекта.
<?php $ConvertDateBack = Zend_Controller_Action_HelperBroker::getStaticHelper('ConvertDate'); $disabledDaysRange = array(); foreach($this->reservedDates as $dates) { $date = $ConvertDateBack->ConvertDateBack($dates->reservation_date); $disabledDaysRange[] = $date; } ?> <script> var disabledDaysRange = $disabledDaysRange ???? Please Help; $(function() { function disableRangeOfDays(d) { for(var i = 0; i < disabledDaysRange.length; i++) { if($.isArray(disabledDaysRange[i])) { for(var j = 0; j < disabledDaysRange[i].length; j++) { var r = disabledDaysRange[i][j].split(" to "); r[0] = r[0].split("-"); r[1] = r[1].split("-"); if(new Date(r[0][2], (r[0][0]-1), r[0][1]) <= d && d <= new Date(r[1][2], (r[1][0]-1), r[1][1])) { return [false]; } } }else{ if(((d.getMonth()+1) + '-' + d.getDate() + '-' + d.getFullYear()) == disabledDaysRange[i]) { return [false]; } } } return [true]; } $('#date').datepicker({ dateFormat: 'dd/mm/yy', beforeShowDay: disableRangeOfDays }); }); </script>
Чтобы преобразовать ваш массив PHP в JS, вы можете сделать это следующим образом:
var js_array = [<?php echo '"'.implode('","', $disabledDaysRange ).'"' ?>];
или используя JSON_ENCODE:
var js_array =<?php echo json_encode($disabledDaysRange );?>;
Пример без JSON_ENCODE:
<script type='text/javascript'> <?php $php_array = array('abc','def','ghi'); ?> var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>]; alert(js_array[0]); </script>
Пример с JSON_ENCODE:
<script type='text/javascript'> <?php $php_array = array('abc','def','ghi'); ?> var js_array =<?php echo json_encode($disabledDaysRange );?>; alert(js_array[0]); </script>
Функция PHP json_encode преобразует данные, переданные ей в строку JSON, которая затем может быть выведена в переменную JavaScript. Функция PHP json_encode возвращает строку, содержащую эквивалент JSON переданного ему значения.
<?php $ar = array('apple', 'orange', 'banana', 'strawberry'); echo json_encode($ar); // ["apple","orange","banana","strawberry"] ?>
Вы можете передать строковый вывод JSON с помощью json_encode в переменную JavaScript следующим образом:
<script type="text/javascript"> // pass PHP variable declared above to JavaScript variable var ar = <?php echo json_encode($ar) ?>; </script>
Числовой индексный массив PHP преобразуется в литерал массива в строке JSON. Параметр JSON_FORCE_OBJECT может использоваться, если вы хотите, чтобы массив выводился как объект:
<?php echo json_encode($ar, JSON_FORCE_OBJECT); // {"0":"apple","1":"orange","2":"banana","3":"strawberry"} ?>
Пример ассоциативной матрицы:
<?php $book = array( "title" => "JavaScript: The Definitive Guide", "author" => "David Flanagan", "edition" => 6 ); ?> <script type="text/javascript"> var book = <?php echo json_encode($book, JSON_PRETTY_PRINT) ?>; /* var book = { "title": "JavaScript: The Definitive Guide", "author": "David Flanagan", "edition": 6 }; */ alert(book.title); </script>
Обратите внимание, что ассоциативный массив PHP становится литералом объекта в JavaScript. Мы используем параметр JSON_PRETTY_PRINT в качестве второго аргумента json_encode для вывода вывода в читаемом формате.
Вы можете получить доступ к свойствам объекта с помощью точечного синтаксиса, отображаемого с предупреждением, включенным выше, или синтаксисом с квадратной скобкой: book ['title'].
здесь вы можете найти дополнительную информацию и подробную информацию.
Вы пытались использовать json_encode http://php.net/manual/en/function.json-encode.php
Он преобразует массив в строку json
<?php $ConvertDateBack = Zend_Controller_Action_HelperBroker::getStaticHelper('ConvertDate'); $disabledDaysRange = array(); foreach($this->reservedDates as $dates) { $date = $ConvertDateBack->ConvertDateBack($dates->reservation_date); $disabledDaysRange[] = $date; } $disDays = size($disabledDaysRange); ?> <script> var disabledDaysRange = {}; var disDays = '<?=$disDays;?>'; for(i=0;i<disDays;i++) { array.push(disabledDaysRange,'<?=$disabledDaysRange[' + i + '];?>'); } ............................
<script> var disabledDaysRange = $disabledDaysRange ???? Please Help; $(function() { function disableRangeOfDays(d) {
в вышеприведенном массиве присваивается переменной javascript "disableDaysRange"
$disallowDates = ""; echo "["; foreach($disabledDaysRange as $disableDates){ $disallowDates .= "'".$disableDates."',"; } echo substr(disallowDates,0,(strlen(disallowDates)-1)); // this will escape the last comma from $disallowDates echo "];"; so your javascript var diableDateRange shoudl be var diableDateRange = ["2013-01-01","2013-01-02","2013-01-03"];
Это может быть простое решение.
var mydate = '<?php implode("##",$youdateArray); ?>'; var ret = mydate.split("##");
<?php $ConvertDateBack = Zend_Controller_Action_HelperBroker::getStaticHelper('ConvertDate'); $disabledDaysRange = array(); foreach($this->reservedDates as $dates) { $date = $ConvertDateBack->ConvertDateBack($dates->reservation_date); $disabledDaysRange[] = $date; array_push($disabledDaysRange, $date); } $finalArr = json_encode($disabledDaysRange); ?> <script> var disabledDaysRange = <?=$finalArr?>; </script>
Когда мы преобразуем массив PHP в массив JS, мы получаем все значения в строке. Например:
var ars= '<?php echo json_encode($abc); ?>';
Проблема в описанном выше методе заключается в том, когда мы пытаемся получить первый элемент ars[0]
тогда он дает нам скобку, где, как и нам, нам нужен первый элемент по сравнению с скобкой, поэтому лучший способ этого –
var packing_slip_orders = JSON.parse('<?php echo json_encode($packing_slip_orders); ?>');
Вы должны использовать json_parse
после json_encode
чтобы получить точный результат массива.