簡體   English   中英

將 php 數組轉換為 Javascript

[英]Convert php array to Javascript

如何以這樣的格式轉換 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"
];

我將假設您為 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 之前的版本,你應該盡快升級)

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

愚蠢而簡單:

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

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

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

我發現在 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);?>');

很簡單 ...!

使用這個方法:

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

在 Laravel Blade {{ }} 中使用此方法:

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

為關聯和非關聯數組工作。

很簡單我用這種方式:

爪哇腳本

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

PHP 數組轉換為 Javascript

問候!

你也可以這樣做

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

對於 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());

這是我的職能。 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”

我使用了一個假的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>

它可以以更安全的方式完成。

如果您的 PHP 數組包含特殊字符,則需要在 PHP 中使用 rawurlencode() ,然后在 JS 中使用 decodeURIComponent() 來轉義這些字符。 並將 JSON 解析為原生 js。 嘗試這個:

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

console.log(data);

我遇到了同樣的問題,這就是我的做法。

/*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. 
        }
   });
});

我希望它有幫助。

把事情簡單化 :

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

如果您需要將多維 PHP 數組直接打印到 html 頁面源代碼中,並以縮進的人類可讀 Javascript 對象表示法(又名 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;
}

?>       

下面是將 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);

它就像一個魅力。

這里有許多好的和復雜的解決方案,這是一種無需在用戶端解析 json 的方法。

$mtc=array();
$replace=array();

$x = json_encode($thearray);

preg_match_all('/"[a-z0-9_]*":/',$x,$mtc);

foreach($mtc[0] as $v){
    array_push($replace,str_replace('"','',$v));
}
    
$x = str_replace($mtc[0],$replace,$x);

echo '<script type="text/javascript">x='.$x.';console.log(x);</script>';

這適用於具有多個級別的索引和關聯數組(任何組合),並且不需要用戶端 json 解析。

對於Laravel ,Blade {{ }}語句會通過 PHP 的 htmlspecialchars 函數自動發送,以防止 XSS 攻擊。 您的數據要轉義,您可以使用以下語法:

const jsArray = {!! str_replace('&quot;', '', json_encode($array)) !!};

對於 Laravel 用戶:使用@json

var cities = @json($data);

如官方文檔中所述: https://laravel.com/docs/8.x/blade#rendering-json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM