Chuyển đổi mảng php sang Javascript


182

Làm cách nào tôi có thể chuyển đổi một mảng PHP theo định dạng như thế này

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
)

đến một mảng Javascript ở định dạng dưới đây?

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

3
Bạn có thể làm rõ câu hỏi của bạn? Bạn có thực sự đang cố gắng tạo một mảng JavaScript hay bạn đang cố gắng tạo một chuỗi mà bạn có thể đặt vào một scriptthẻ sẽ tạo ra nó hoặc bạn đang cố gắng tạo JSON để gửi lại khi trả lời yêu cầu ajax hoặc ... (Ngoài ra, đáng để kiểm tra hộp Cách định dạng ở phía bên tay phải khi bạn hỏi câu hỏi của bạn và trang được liên kết từ [?] Ngay phía trên khu vực câu hỏi.)
TJ Crowder

Câu trả lời:


59

Câu trả lời của Spudley là tốt .

Thông báo bảo mật: Những điều sau đây không còn cần thiết cho bạn nữa

Nếu bạn không có PHP 5.2, bạn có thể sử dụng cái gì đó như thế này:

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
đồng ý: nếu bạn đang sử dụng và PHP cũ, bạn sẽ cần phải tự viết. Tuy nhiên, bạn cũng nên xem xét nâng cấp PHP của mình nếu có thể!
Spudley

5
Ngay cả khi bạn đang sử dụng PHP cũ, đừng tự viết, hãy lấy một thư viện hiện có được duy trì / sử dụng bởi nhiều người / dự án. Vì vậy, câu trả lời này chỉ cho thấy làm thế nào một cái gì đó có thể được thực hiện, nhưng nó không nên khuyến nghị điều này - bất kể phiên bản PHP. Ví dụ: pear.php.net/package/Service_JSON
hakre

Bạn đúng. Tuy nhiên, mã ở trên đã được sử dụng / thử nghiệm trong nhiều năm trong hai dự án lớn.
Udo G

1
BTW, bạn đã thêm cuộc gọi Array_map. Và, thành thật mà nói, không cần phải chỉnh sửa một câu trả lời hoàn toàn hợp lệ cho câu hỏi ban đầu và đánh dấu nó bằng "Thông báo bảo mật" khi nó không phát sinh bất kỳ vấn đề bảo mật nào.
Udo G

1
@UdoG: nếu bạn không đồng ý với chỉnh sửa, bạn có thể tự mình chỉnh sửa lại. hakre có một điểm hợp lý khi ai đó đọc câu hỏi này sử dụng một thư viện được biết là an toàn và được kiểm tra tốt, ví dụ từ Pear thay vì chỉ lấy mã này để khen. Ngoài ra, đáng để chỉ ra rằng PHP 5.2 đã hết hỗ trợ khi câu hỏi này được hỏi. Như tôi viết bây giờ, nó đã không được hỗ trợ trong hai năm và đã biết các vấn đề bảo mật sẽ không được vá. Do đó, vấn đề bảo mật chỉ đơn giản là sử dụng PHP 5.2, trước khi chúng tôi thậm chí xem xét mã trong câu trả lời này.
Spudley

435

Tôi sẽ giả định rằng hai mảng bạn đã cung cấp cho PHP và JS không liên quan đến nhau và chúng chỉ là ví dụ về cách các mảng trông trong hai ngôn ngữ. Rõ ràng là bạn sẽ không thể chuyển đổi các chuỗi chữ cái và số đó thành các tên thành phố đó.

PHP cung cấp một chức năng để chuyển đổi các mảng PHP thành mã Javascript : json_encode(). (về mặt kỹ thuật, đó là định dạng JSON; JSON là viết tắt của Ký hiệu đối tượng JavaScript)

Sử dụng nó như thế này:

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

Xem thêm trang hướng dẫn tôi liên kết ở trên để biết thêm thông tin.

Lưu ý rằng json_encode()chỉ có sẵn trong PHP 5.2 trở lên, vì vậy nếu bạn đang sử dụng phiên bản cũ hơn, bạn sẽ cần sử dụng phiên bản hiện có - trang hướng dẫn PHP cũng bao gồm các nhận xét với các chức năng được viết bởi những người cần nó. (nhưng điều đó nói rằng, nếu bạn đang sử dụng bất cứ thứ gì cũ hơn PHP 5.2, bạn nên nâng cấp ASAP)


Bạn đang thiếu một dấu chấm phẩy ở cuối mảng javascript và đó cũng không phải là cách các mảng PHP được khởi tạo (thử mảng ('abc' ....)) ... dù sao đi nữa vì đó có thể là điều OP muốn
Daniel Sloof

@Spudley Xin chào, tôi đã thử điều này và trong javascript đã thử truy cập vào mảng được tạo bằng php như vậy console.log('stuff: ' + javascript_array[0]);, nhưng nó nói javascript_arraychưa được xác định
Growler

Nếu mảng PHP của bạn chứa các ký tự đặc biệt, điều này sẽ sai. Bạn có thể thoát các ký tự đặc biệt bằng cách sử dụng các hàm urlencode (). Xem câu trả lời của tôi: stackoverflow.com/questions/5618925/
Kẻ

1
Chỉ cần chỉ ra rằng json_encode xác định một đối tượng JavaScript, KHÔNG phải là một mảng.
Patrick Moore

1
@PatrickMoore - nếu bạn định nói về nó, hãy đưa json_encodera một chuỗi JSON, có thể đại diện cho một đối tượng JS hoặc một mảng JS, hoặc thậm chí là một giá trị vô hướng, nếu đó là những gì bạn vượt qua. Các ví dụ trong câu trả lời của tôi sẽ xuất ra một mảng JavaScript, không phải là một đối tượng.
Spudley

38

Ngốc và đơn giản:

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

6
Vì tò mò : điều gì sẽ xảy ra khi chuỗi chứa trích dẫn, dấu ngoặc kép và / hoặc dấu phẩy?
Nis

1
Vì có một chức năng cho việc này, nên được ưu tiên hơn một giải pháp ngẫu hứng trừ khi có lý do chính đáng; không có lý do nào ở đây được nêu.
cjbarth

hoạt động tốt hơn cho các ký tự unicode (tiếng Urdu trong trường hợp của tôi)
Hammad Khan

33

Bạn không phải gọi parseJSON vì đầu ra của json_encodelà một javascript. Chỉ cần gán nó cho một biến 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

bạn có thể chuyển đổi mảng php thành javascript bằng json_encodechức năng của php

<?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
vòng lặp đó thật tồi tệ
Eric

2
Vâng, đó là cho mục đích trình diễn :)
Dipesh KC

7
@ Eric ví dụ được lấy trực tiếp vì nó là từ các câu hỏi. Tôi có thể đã sử dụng console.log()nhưng bản thân câu hỏi rất cơ bản (và nhiều người dùng chưa có kinh nghiệm với công cụ kiểm tra mã trình duyệt), vì vậy tôi đã quyết định sử dụng cảnh báo () vì người dùng sẽ thấy nó trực tiếp. Nhưng bạn biết rất rõ về nó không phải là phần liên quan của câu hỏi, chỉ là một cách để xác minh xem logic có hoạt động hay không.
Dipesh KC

17

Tôi thấy cách nhanh nhất và dễ nhất để làm việc với một mảng PHP trong Javascript là làm điều này:

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

quá đơn giản ...!

sử dụng phương pháp này:

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

trong laravel blade {{}} sử dụng phương pháp này:

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

làm việc cho mảng liên kết và không liên kết.


1
Phương pháp @MohammadKawsara được sử dụng hoạt động tốt nhất đối với tôi rõ ràng nếu bạn tin tưởng vào dữ liệu người dùng.
Tomas Crofty

6

bạn cũng có thể làm theo cách này

<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

Rất đơn giản tôi sử dụng cách này:

JAVASCRIPT :

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

Chuyển đổi mảng PHP sang Javascript

Trân trọng!


4

Đối với một mảng nhiều chiều trong PHP4, bạn có thể sử dụng phần bổ sung sau vào mã được đăng bởi 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

Đây là chức năng của tôi. JavaScript phải theo PHP nếu không sử dụng 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>

Hàng cuối cùng có thể là .... văn bản (jsArray); và sẽ được hiển thị "1,2,3,4,5,6"


3

Tôi sử dụng một mảng php giả

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

nếu bao giờ mảng của bạn không xác định (đã được thực hiện)

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

... Hoặc bạn có thể kích hoạt () mảng đầu tiên để lấy mảng "giả". Tôi biết đây là một phản hồi cũ, nhưng ý tưởng chỉ xuất hiện trong đầu tôi.
Peter Lenjo

1
chắc chắn, nhưng cách của tôi là nhanh nhất trong tất cả các đề xuất trên trang này. Đôi khi, tốc độ có thể là một yếu tố quan trọng.
Mik

2

Nó có thể được thực hiện một cách an toàn hơn.

Nếu mảng PHP của bạn chứa các ký tự đặc biệt, bạn cần sử dụng rawurlencode () trong PHP và sau đó sử dụng decodeURIComponent () trong JS để thoát khỏi các ký tự đó. Và phân tích JSON cho js bản địa. Thử cái này:

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

console.log(data);

1

Tôi đã có cùng một vấn đề và đây là cách tôi thực hiện nó.

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

Tôi hy vọng nó sẽ giúp.


1

Giữ cho nó đơn giản:

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

0

Nếu bạn cần một mảng PHP đa chiều được in trực tiếp vào mã nguồn trang html và theo kiểu Ký hiệu đối tượng Javascript có thể đọc được của con người (hay còn gọi là JSON), hãy sử dụng chức năng hay này tôi tìm thấy trong http://php.net/manual /en/feft.json-encode.php#102091 được mã hóa bởi ai đó có biệt danh "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;
}

?>       

Xin đừng bận tâm !! Bây giờ chúng ta chỉ có thể sử dụng cái này: json_encode ($ mảng, JSON_PRETTY_PRINT); và hạnh phúc!
Heitor

0

Dưới đây là một mẹo khá đơn giản để chuyển đổi mảng PHP sang mảng JavaScript:

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

JS dưới đây:

// 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);

Nó hoạt động như một say mê.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.