将 php 数组转换为 Javascript

IT技术 php javascript arrays
2021-02-01 12:38:42

如何以这样的格式转换 PHP 数组

Array
(
    [0] => 001-1234567
    [1] => 1234567
    [2] => 12345678
    [3] => 12345678
    [4] => 12345678
    [5] => AP1W3242
    [6] => AP7X1234
    [7] => AS1234
    [8] => MH9Z2324
    [9] => MX1234
    [10] => TN1A3242
    [11] => ZZ1234
)

到以下格式的 Javascript 数组?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];
6个回答

我将假设您为 PHP 和 JS 提供的两个数组不相关,它们只是数组在两种语言中的外观示例。很明显,您无法将这些字母和数字序列转换为城市名称。

PHP 提供了一个将 PHP 数组转换为 Javascript 代码的函数:json_encode(). (从技术上讲,它是 JSON 格式;JSON 代表 JavaScript Object Notation)

像这样使用它:

<script type='text/javascript'>
<?php
$php_array = array('abc','def','ghi');
$js_array = json_encode($php_array);
echo "var javascript_array = ". $js_array . ";\n";
?>
</script>

另请参阅我上面链接的手册页以获取更多信息。

请注意,json_encode()它仅在 PHP 5.2 及更高版本中可用,因此如果您使用的是旧版本,则需要使用现有版本——PHP 手册页还包括由需要它的人编写的函数注释。(不过话说回来,如果你使用的是 PHP 5.2 之前的版本,你应该尽快升级)

您在 javascript 数组的末尾缺少分号,而且这也不是 PHP 数组的初始化方式(尝试 array('abc'....))...无论如何都要投票,因为它可能是 OP 想要的
2021-03-14 12:38:42
@PatrickMoore - 如果你想学究,json_encode输出一个 JSON 字符串,它可以代表一个 JS 对象或一个 JS 数组,甚至是一个标量值,如果这是你传递的。我的答案中的示例将输出一个 JavaScript 数组,而不是一个对象。
2021-03-16 12:38:42
如果您的 PHP 数组包含特殊字符,则会出错。您可以使用 urlencode() 函数对特殊字符进行转义。看我的回答:stackoverflow.com/questions/5618925/...
2021-03-21 12:38:42
只是要指出 json_encode 定义了一个 JavaScript 对象,而不是一个数组。
2021-03-28 12:38:42
@Spudley 嗨,我试过了,在 javascript 中尝试访问在 php 中创建的数组console.log('stuff: ' + javascript_array[0]);,但它说javascript_array尚未定义
2021-04-05 12:38:42

Spudley 的回答很好

安全注意事项: 您不再需要以下内容

如果你没有 PHP 5.2,你可以使用这样的东西:

function js_str($s)
{
    return '"' . addcslashes($s, "\0..\37\"\\") . '"';
}

function js_array($array)
{
    $temp = array_map('js_str', $array);
    return '[' . implode(',', $temp) . ']';
}

echo 'var cities = ', js_array($php_cities_array), ';';
即使您使用的是旧 PHP,也不要自己编写,而是使用由多个人/项目维护/使用的现有库。所以这个答案只展示了如何做某事,但它不应该推荐这个 - 无论 PHP 版本如何。例如pear.php.net/package/Services_JSON
2021-03-14 12:38:42
同意:如果您使用的是旧 PHP,则需要编写自己的 PHP。但是,如果可能,您也应该考虑升级您的 PHP!
2021-03-21 12:38:42
@UdoG:如果您不同意编辑,您可以自行再次编辑。hakre 有一个观点,即阅读此问题的人使用已知安全且经过良好测试的库(例如来自 Pear的库,而不是仅根据优点使用此代码)是明智的此外,值得指出的是,当提出这个问题时,PHP 5.2 已经不受支持。正如我现在写的那样,它已经两年不受支持,并且已经知道不会修补的安全问题。因此,在我们甚至考虑此答案中的代码之前,仅使用 PHP 5.2 就是一个安全问题。
2021-03-25 12:38:42
你说得对。但是,上面的代码已经在两个大型项目中使用/测试了多年。
2021-04-07 12:38:42
顺便说一句,添加了 array_map 调用。而且,老实说,没有必要编辑对原始问题的完全有效的答案,并在它不会引起任何安全问题时将其标记为“安全通知”。
2021-04-09 12:38:42

愚蠢而简单:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
只是出于好奇:当字符串包含 quote 、双引号和/或逗号时会发生什么?
2021-03-11 12:38:42
更适用于 unicode 字符(在我的情况下为乌尔都语)
2021-03-24 12:38:42
由于有一个功能,除非有充分的理由,否则应该优先于临时解决方案;这里没有说明原因。
2021-03-25 12:38:42

您不必调用 parseJSON,因为 的输出json_encode是 javascript 文字。只需将它分配给一个 js 变量。

<script type="text/javascript">
    //Assign php generated json to JavaScript variable
    var tempArray = <?php echo json_encode($php_array); ?>;

   //You will be able to access the properties as 
    alert(tempArray[0].Key);
</script>
谢谢,即使对于混合对象数组,这也能很好地工作。非常简单高效!
2021-03-16 12:38:42

您可以使用 php 的json_encode函数将 php 数组转换为 javascript

<?php $phpArray = array(
          0 => 001-1234567, 
          1 => 1234567, 
          2 => 12345678, 
          3 => 12345678,
          4 => 12345678,
          5 => 'AP1W3242',
          6 => 'AP7X1234',
          7 => 'AS1234',
          8 => 'MH9Z2324', 
          9 => 'MX1234', 
          10 => 'TN1A3242',
          11 => 'ZZ1234'
    )
?>
<script type="text/javascript">

    var jArray= <?php echo json_encode($phpArray ); ?>;

    for(var i=0;i<12;i++){
        alert(jArray[i]);
    }

 </script>
@Eric的示例化合物可以直接,因为它是从问题。我本可以使用console.log()但问题本身非常基本(并且许多用户没有浏览器代码检查工具的经验),所以我决定使用 alert() 因为用户会直接看到它。但你很清楚它不是问题的相关部分,只是一种验证逻辑是否有效的方法。
2021-03-23 12:38:42
那个循环太可怕了
2021-03-29 12:38:42
那是为了演示目的:)
2021-03-29 12:38:42