将PHP数组转换为JS数组(ISO 8859-1字符)

时间:2017-03-09 15:47:24

标签: javascript php arrays

尽管有各种消息来源,但我无法让它发挥作用。我尝试以下方法:

<?php
$list_array = array();
foreach ($this->resultatTypeMail as $mailType) {
    $nom          = $mailType->getNom();
    $objet        = $mailType->getObjet();
    $list_array[] = array(
        'Name'   => $nom,
        'Object' => $objet,
    );
    echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
    echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
?>
<script type="text/javascript">
 var js_array = [<?php echo json_encode( $list_array ); ?>];
 alert(js_array[0]); // This returns undefined
</script>

当我提醒他们时,我在$nom$objet上获得了令人满意的结果。

问题: js_array[0]返回undefined

请注意,我不是UTF-8。我不确定它是否相关。

编辑:我的目标是获得一系列可在JS中使用的自定义php对象。

3 个答案:

答案 0 :(得分:1)

在PHP中,当使用json_encode解析时,具有字符串键的数组将转换为对象。

您可以使用array_keys强制创建数组,也可以在javascript中使用对象表示法

<?php
$list_array = array();
foreach ($this->resultatTypeMail as $mailType) {
    $nom          = $mailType->getNom();
    $objet        = $mailType->getObjet();
    $list_array[] = array(
        'Name'   => $nom,
        'Object' => $objet,
    );
    echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
    echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
<script type="text/javascript">
 var js_array = [<?php echo json_encode( array_values($list_array) ); ?>];
 alert(js_array[0]); 
</script>

或者

<?php
$list_array = array();
foreach ($this->resultatTypeMail as $mailType) {
    $nom          = $mailType->getNom();
    $objet        = $mailType->getObjet();
    $list_array[] = array(
        'Name'   => $nom,
        'Object' => $objet,
    );
    echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
    echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
<script type="text/javascript">
 var js_array = [<?php echo json_encode( array_values($list_array) ); ?>];
 alert(js_array.Name); 
</script>

答案 1 :(得分:1)

我认为您有多个问题:您在;行之后错过json_encode()(实际上并不需要);你用括号围绕json_encode()的结果(这应该有效但我希望它不是你想要的);最重要的是,在打印JS之前,你错过了关闭的PHP ?>标签......

这对我有用:

<?php
    // your PHP code here...
?>

<script type="text/javascript">
   var js_array = <?php echo json_encode($list_array); ?>;
   alert(js_array[0]); // This works for me!
</script>

看起来问题可能出现在您所说的编码中 - 似乎json_encode仅适用于UTF-8!来自json_encode() docs

  

所有字符串数据必须采用UTF-8编码。

所以我认为在将字符串放入数组之前必须将字符串转换为UTF-8,例如:

$list_array[] = array(
    'Name'   => utf8_encode($nom),
    'Object' => utf8_encode($objet),
);

认为只是应该有效 - 否则你可以从同一json_encode()文档中的评论中尝试this;或this其他问题以获得更多想法......

答案 2 :(得分:1)

只需从var js_array =行中移除[],它就会起作用:

<强>错

var js_array = [<?php echo json_encode( array_values($list_array) ); ?>];

从右

var js_array = <?php echo json_encode( array_values($list_array) ); ?>;

工作代码:

<?php

class MailType {
   function __construct($n, $o) {
       $this->nom = $n;
       $this->objet = $o;
   }

    private $nom;
    private $objet;

    public function getNom() {
        return $this->nom;
    }

    public function getObjet() {
        return $this->objet;
    }

}

$list_array = array();
$resultatTypeMail = array(new MailType('John', 'obj1'), new MailType('Mary', 'obj2'));
foreach ($resultatTypeMail as $mailType) {
    $nom          = $mailType->getNom();
    $objet        = $mailType->getObjet();
    $list_array[] = array(
        'Name'   => $nom,
        'Object' => $objet,
    );
    //echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
    //echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
?>
<script type="text/javascript">
 var js_array = <?php echo json_encode( $list_array ) ?>;
 alert(js_array[0].Name); // This returns John
</script>

您可以在此处看到它:http://phpfiddle.org/main/code/5xei-ybpn

(按F9或点击'Run - F9'运行)