PHP array() to javascript array()

2022-08-30 17:27:18

我正在尝试将PHP数组转换为jQuery的datetimepicker的javascript数组以禁用某些日期。但我似乎无法在互联网上找到正确的答案。我正在使用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>

答案 1

要将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>

答案 2

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_encode传递给 JavaScript 变量来传递 JSON 字符串输出,如下所示:

<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'])访问对象属性。

在这里,您可以找到更多信息和详细信息。