将PHP数组转换为JavaScript数组

25

我正在尝试将PHP数组转换为javascript数组,以便于使用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>

你可以使用array.push函数将值推入jQuery数组中。 - Ganesh Babu
你尝试过使用 "var_dump($disabledDaysRange)" 吗?只是为了查看在 PHP 中得到的结果是否与 jQuery 中所需的相符。 - Oliboy50
3
JSON_ENCODE 查看此链接:http://php.net/manual/fr/function.json-encode.php。 - Charaf JRA
1
jQuery并没有数组这个概念。JQuery对象是DOM节点的集合(类似于数组),但你不能将DOM节点发送到网络上。你是不是想说“JavaScript数组”? - John Dvorak
@Oliboy50 当我使用vardump时,它返回:array(2){ [0]=> string(10) "13/09/2013" [1]=> string(10) "24/09/2013" } - Daan
显示剩余2条评论
9个回答

47

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

json_encode 怎么样?那不是更“安全”一些的选择吗? - Abdulaziz
两个都不错,我会加入第二个解决方案。 - Charaf JRA
@FaceOfJock 两个例子都可以工作,但是日期时间选择器现在无法打开。 - Daan
@user1528407,你可以告诉我你在浏览器控制台中说了什么吗? - Charaf JRA
@Charafjra 谢谢,完美的工作。+1 给你。 - Keyur Shah

18

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输出的JSON字符串传递给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 数组在 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'])访问对象属性,如上面包含的警报所示。

这里您可以找到更多信息和详细内容。


6
当我们将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_encode之后,应该使用json_parse来获取准确的数组结果。


3

1
虽然这理论上回答了这个问题,但最好还是在此处包含答案的基本部分(例如代码示例),并提供参考链接。如果示例正确,我可能会点赞。 - John Dvorak

2
这可能是一个简单的解决方案。
var mydate = '<?php implode("##",$youdateArray); ?>';
var ret = mydate.split("##");

智能且简单的解决方案 :) - Abhishek Goel

0
<?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 + '];?>');
}
............................

0
 <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"];

1
你怎么知道 $disableDates 是字符串(而且是不包含单引号的字符串)?最好使用 json_encode - John Dvorak
因为我认为日期可以以字符串格式使用。 - Waqas Ghouri
那么关于那些撇号呢? - John Dvorak

0
<?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>

1
不要在客户端对JSON进行解码。JavaScript引擎已经为您执行了此操作。 - John Dvorak

0
你需要使用PHP语法json_encode将PHP数组转换为javascript数组。 json_encode将PHP数组转换为JSON字符串。

将单维PHP数组转换为javascript数组

<?php
var $itemsarray= array("Apple", "Bear", "Cat", "Dog");
?>
<script>
var items= <?php echo json_encode($itemsarray); ?>;
console.log(items[2]); // Output: Bear
// OR
alert(items[0]); // Output: Apple
</script>

多维 PHP 数组转换为 JavaScript 数组。
<?php
var $itemsarray= array( 
               array('name'='Apple', 'price'=>'12345'),
               array('name'='Bear', 'price'=>'13344'),
               array('name'='Potato', 'price'=>'00440')
             );
?>


<script>
var items= <?php echo json_encode($itemsarray); ?>;
console.log(items[1][name]); // Output: Bear
// OR
alert(items[0][price]); // Output: Apple
</script>

更多细节,您也可以查看将PHP数组转换为JavaScript数组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接