将php数组转换为Javascript


182

我如何以这种格式转换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"
];

3
你能澄清你的问题吗?您是真的要创建一个JavaScript数组,还是要创建一个可以放入script创建它的标签中的字符串,或者您是要创建JSON以发送回Ajax请求,还是要... (另外,值得一提的是,在提出问题时,请查看右侧的“ 如何格式化”框,以及从问题区域上方的[?] 链接的页面。)
TJ Crowder

Answers:


59

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), ';';

2
同意:如果您使用的是旧PHP,则需要编写自己的PHP。但是,如果可能的话,您还应该考虑升级PHP!
Spudley 2011年

5
即使您使用的是旧的PHP,也不要编写自己的PHP,而是使用一个由多个人/项目维护/使用的现有库。因此,此答案仅显示了可以完成的操作,但无论PHP版本如何,都不建议这样做。例如pear.php.net/package/Services_JSON
hakre

你是对的。但是,上面的代码已经在两个大型项目中使用/测试了多年。
Udo G

1
顺便说一句,添加了array_map调用。而且,老实说,当原始问题不引起任何安全问题时,无需编辑完美有效的答案并将其标记为“安全通知”。
Udo G

1
@UdoG:如果您不同意编辑,则可以自由地再次对其进行编辑。hakre的观点是,对于阅读此问题的人来说,使用一个已知的安全且经过良好测试的库(例如Pear)是明智的,而不是仅凭优点取而代之。另外,值得指出的是,当问到这个问题时,PHP 5.2已经不在支持范围之内。正如我现在所写,它已经两年不受支持,并且已经知道将不会修复的安全问题。因此,在我们甚至考虑此答案中的代码之前,仅使用PHP 5.2就是一个安全问题。
Spudley

435

我将假定您为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想要的
Daniel懒洋洋

@Spudley嗨,我尝试了这一点,并在javascript中尝试了这样访问php中创建的数组console.log('stuff: ' + javascript_array[0]);,但它说javascript_array尚未定义
Growler 2014年

如果您的PHP数组包含特殊字符,这将出错。您可以使用urlencode()函数转义特殊字符。见我的回答:stackoverflow.com/questions/5618925/...
奔Rogmans

1
只是指出json_encode定义了JavaScript对象,而不是数组。
Patrick Moore

1
@PatrickMoore-如果您对此不屑一顾,将json_encode输出一个JSON字符串,该字符串可以表示JS对象或JS数组,甚至可以表示单个标量值(如果您通过的话)。我的答案中的示例将输出一个JavaScript数组,而不是一个对象。
Spudley '18

38

愚蠢而简单:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];

6
出于好奇:字符串包含引号,双引号和/或逗号时会发生什么?
Nis 2014年

1
由于具有此功能,因此除非有充分的理由,否则应优先于即兴的解决方案。在此没有说明理由。
cjbarth 2014年

适用于Unicode字符(在我的情况下为urdu)效果更好
Hammad Khan

33

您不必调用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>

23

您可以使用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>

3
这个循环很糟糕
Eric

2
好吧,这只是为了演示:)
Dipesh KC 2015年

7
@Eric的示例化合物可以直接,因为它是从问题。我本可以使用,console.log()但问题本身是非常基本的(许多用户没有使用浏览器代码检查工具的经验),所以我决定使用alert(),因为用户可以直接看到它。但是您对此非常了解不是问题的相关部分,只是一种验证逻辑是否有效的方法。
Dipesh KC 2015年

17

我发现在Javascript中使用PHP数组的最快,最简单的方法是这样做:

PHP:

$php_arr = array('a','b','c','d');

Javascript:

//this gives me a JSON object
js_arr = '<?php echo JSON_encode($php_arr);?>';


//Depending on what I use it for I sometimes parse the json so I can work with a straight forward array:
js_arr = JSON.parse('<?php echo JSON_encode($php_arr);?>');

10

很简单 ...!

使用此方法:

<?php echo json_encode($your_array); ?>; 

在laravel刀片{{}}中使用以下方法:

{{ str_replace('&quot;', '', json_encode($your_array)) }} 

为关联和非关联数组工作。


1
如果您信任用户数据,显然,@ MohammadKawsara使用的方法最适合我。
Tomas Crofty,

6

你也可以这样

<script>  
    <?php 
        $php_array = array('abc','def','ghi');
        $code_array = json_encode($php_array);
    ?>  
    var array_code = <?php echo $code_array; ?>;
    console.log(array_code);
</script>

6

很简单,我使用这种方式:

JAVASCRIPT

var arrayJavascript = <?php echo json_encode($arrayPhp) ?>;

兑换 PHP数组为Javascript

问候!


4

对于PHP4中的多维数组,您可以在Udo G发布的代码中使用以下补充:

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

function js_array($array, $keys_array) {
  foreach ($array as $key => $value) {
    $new_keys_array = $keys_array;
    $new_keys_array[] = $key;
    if(is_array($value)) {          
      echo 'javascript_array';
      foreach($new_keys_array as $key) {
        echo '["'.$key.'"]';
      }
      echo ' = new Array();';

      js_array($value, $new_keys_array);
    } else {
      echo 'javascript_array';
      foreach($new_keys_array as $key) {
        echo '["'.$key.'"]';
      }
      echo ' = '.js_str($value).";";                        
    }
  } 
}

echo 'var javascript_array = new Array();';
js_array($php_array, array());

4

这是我的职责 JavaScript必须在PHP下,否则请使用SESSION。

<?php
 $phpArray=array(1,2,3,4,5,6);
?>

<div id="arrayCon" style="width:300px;"></div>

<script type="text/javascript">
var jsArray = new Array();
<?php
 $numArray=count($phpArray);
 for($i=0;$i<$numArray;$i++){
  echo "jsArray[$i] = ". $phpArray[$i] . ";\n";
 }
?>
$("#arrayCon").text(jsArray[1]);
</script>

最后一行可以是.... text(jsArray); 并显示为“ 1,2,3,4,5,6”


3

我使用假的 php数组

<?php 
       // instead to create your array like this
       $php_array = ["The","quick","brown","fox","jumps","over","the","lazy","dog"];

       // do it like this (a simple variable but with separator)
       $php_fake_array = "The,quick,brown,fox,jumps,over,the,lazy,dog";
?>

<script type="text/javascript">

        // use the same separator for the JS split() function
        js_array = '<?php echo $php_fake_array; ?>'.split(',');

</script>

如果您的阵列是未知的(已制造)

<?php 
        $php_array = file('my_file.txt');
        $php_fake_array = "";

        // transform your array with concatenate like this
        foreach ($php_array as $cell){

            // since this array is unknown, use clever separator
            $php_fake_array .= $cell.",,,,,"; 
        }
?>

<script type="text/javascript">

        // use the same separator for the JS split() function
        js_array = '<?php echo $php_fake_array; ?>'.split(',,,,,');

</script>

...或者您可以将第一个数组implode()得到“假”的数组。我知道这是一个旧的回应,但是这个主意刚刚出现。
Peter Lenjo

1
当然可以,但是我的方法是此页面上所有建议中最快的。有时,速度可能是一个重要因素。
Mik

2

可以以更安全的方式进行。

如果您的PHP数组包含特殊字符,则需要在PHP中使用rawurlencode(),然后在JS中使用解码URIComponent()来转义那些字符。并将JSON解析为本地js。试试这个:

var data = JSON.parse(
        decodeURIComponent(
            "<?=rawurlencode(json_encode($data));?>"
        )
    );

console.log(data);

1

我有同样的问题,这就是我的做法。

/*PHP FILE*/

<?php

$data = file_get_contents('http://yourrssdomain.com/rss');
$data = simplexml_load_string($data);

$articles = array();

foreach($data->channel->item as $item){

    $articles[] = array(

        'title' => (string)$item->title,
        'description' => (string)$item ->description,
        'link' => (string)$item ->link, 
        'guid' => (string)$item ->guid,
        'pubdate' => (string)$item ->pubDate,
        'category' => (string)$item ->category,

    );  
}

// IF YOU PRINT_R THE ARTICLES ARRAY YOU WILL GET THE SAME KIND OF ARRAY THAT YOU ARE GETTING SO I CREATE AN OUTPUT STING AND WITH A FOR LOOP I ADD SOME CHARACTERS TO SPLIT LATER WITH JAVASCRIPT

$output="";

for($i = 0; $i < sizeof($articles); $i++){

    //# Items
    //| Attributes 

    if($i != 0) $output.="#"; /// IF NOT THE FIRST

// IF NOT THE FIRST ITEM ADD '#' TO SEPARATE EACH ITEM AND THEN '|' TO SEPARATE EACH ATTRIBUTE OF THE ITEM 

    $output.=$articles[$i]['title']."|";
    $output.=$articles[$i]['description']."|";
    $output.=$articles[$i]['link']."|";
    $output.=$articles[$i]['guid']."|";
    $output.=$articles[$i]['pubdate']."|";
    $output.=$articles[$i]['category'];
}

echo $output;

?>
/* php file */


/*AJAX COMUNICATION*/

$(document).ready(function(e) {

/*AJAX COMUNICATION*/

var prodlist= [];
var attrlist= [];

  $.ajax({  
      type: "get",  
      url: "php/fromupnorthrss.php",  
      data: {feeding: "feedstest"},
      }).done(function(data) {

        prodlist= data.split('#');

        for(var i = 0; i < prodlist.length; i++){

            attrlist= prodlist[i].split('|');

            alert(attrlist[0]); /// NOW I CAN REACH EACH ELEMENT HOW I WANT TO. 
        }
   });
});

希望对您有所帮助。


1

把事情简单化 :

var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');

0

如果您需要将多维PHP数组直接打印到html页面源代码中,并且以缩进的人类可读Javascript对象表示法(aka JSON)方式使用,请使用我在http://php.net/manual中找到的漂亮函数/en/function.json-encode.php#102091由昵称“ bohwaz”的人编码。

<?php

function json_readable_encode($in, $indent = 0, $from_array = false)
{
    $_myself = __FUNCTION__;
    $_escape = function ($str)
    {
        return preg_replace("!([\b\t\n\r\f\"\\'])!", "\\\\\\1", $str);
    };

    $out = '';

    foreach ($in as $key=>$value)
    {
        $out .= str_repeat("\t", $indent + 1);
        $out .= "\"".$_escape((string)$key)."\": ";

        if (is_object($value) || is_array($value))
        {
            $out .= "\n";
            $out .= $_myself($value, $indent + 1);
        }
        elseif (is_bool($value))
        {
            $out .= $value ? 'true' : 'false';
        }
        elseif (is_null($value))
        {
            $out .= 'null';
        }
        elseif (is_string($value))
        {
            $out .= "\"" . $_escape($value) ."\"";
        }
        else
        {
            $out .= $value;
        }

        $out .= ",\n";
    }

    if (!empty($out))
    {
        $out = substr($out, 0, -2);
    }

    $out = str_repeat("\t", $indent) . "{\n" . $out;
    $out .= "\n" . str_repeat("\t", $indent) . "}";

    return $out;
}

?>       

请不要介意!现在我们可以使用它:json_encode($ array,JSON_PRETTY_PRINT); 而且要快乐!
Heitor

0

以下是将PHP数组转换为JavaScript数组的简单技巧:

$array = array("one","two","three");

JS下面:

// Use PHP tags for json_encode()

var js_json =  json_encode($array);
var js_json_string = JSON.stringify(js_json);
var js_json_array = JSON.parse(js_json_string);

alert(js_json_array.length);

它像一种魅力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.