Konversi array php ke Javascript

185

Bagaimana saya bisa mengubah array PHP dalam format seperti ini

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
)

ke array Javascript dalam format di bawah ini?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];
pengguna663878
sumber
3
Bisakah Anda mengklarifikasi pertanyaan Anda? Apakah Anda benar-benar mencoba membuat array JavaScript, atau Anda mencoba membuat string yang dapat Anda masukkan dalam scripttag yang akan membuatnya, atau Anda mencoba membuat JSON untuk mengirim balasan sebagai balasan permintaan ajax, atau ... (Juga, perlu memeriksa kotak Cara Memformat di sisi kanan ketika Anda mengajukan pertanyaan, dan halaman yang ditautkan dari [?] Tepat di atas area pertanyaan.)
TJ Crowder

Jawaban:

60

Jawaban Spudley baik-baik saja .

Pemberitahuan Keamanan: Berikut ini tidak perlu lagi bagi Anda

Jika Anda tidak memiliki PHP 5.2, Anda dapat menggunakan sesuatu seperti ini:

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), ';';
Udo G
sumber
2
setuju: jika Anda menggunakan dan PHP lama, Anda harus menulis sendiri. Namun, Anda juga harus mempertimbangkan untuk meningkatkan PHP Anda jika memungkinkan!
Spudley
5
Bahkan jika Anda menggunakan PHP lama, jangan menulis sendiri, ambil perpustakaan yang sudah ada yang dikelola / digunakan oleh lebih dari satu orang / proyek. Jadi jawaban ini hanya menunjukkan bagaimana sesuatu dapat dilakukan, tetapi seharusnya tidak merekomendasikan ini - terlepas dari versi PHP. Misalnya pear.php.net/package/Services_JSON
hakre
Kamu benar. Namun, kode di atas telah digunakan / diuji selama bertahun-tahun di dua proyek besar.
Udo G
1
BTW, Anda menambahkan panggilan array_map. Dan, sejujurnya, tidak perlu mengedit jawaban yang benar-benar valid untuk pertanyaan asli dan menandainya dengan "Pemberitahuan Keamanan" ketika tidak menimbulkan masalah keamanan.
Udo G
1
@ UdoG: jika Anda tidak setuju dengan hasil edit, Anda bebas untuk mengeditnya sendiri. hakre memiliki poin yang masuk akal bagi seseorang yang membaca pertanyaan ini untuk menggunakan perpustakaan yang diketahui aman dan teruji dengan baik, misalnya dari Pear daripada hanya mengambil kode ini berdasarkan kemampuan. Juga, ada baiknya menunjukkan bahwa PHP 5.2 sudah tidak mendukung ketika pertanyaan ini diajukan. Saat saya menulis sekarang, itu tidak didukung selama dua tahun dan telah mengetahui masalah keamanan yang tidak akan ditambal. Karena itu masalah keamanan hanyalah menggunakan PHP 5.2, bahkan sebelum kita mempertimbangkan kode dalam jawaban ini.
Spudley
439

Saya akan berasumsi bahwa dua array yang Anda berikan untuk PHP dan JS tidak terkait, dan mereka hanya contoh bagaimana tampilan array dalam dua bahasa. Jelas Anda tidak akan dapat mengubah urutan huruf dan angka itu menjadi nama kota itu.

PHP menyediakan fungsi untuk mengkonversi PHP array ke dalam kode Javascript: json_encode(). (secara teknis, ini format JSON; JSON adalah singkatan dari JavaScript Object Notation)

Gunakan seperti ini:

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

Lihat juga halaman manual yang saya tautkan di atas untuk informasi lebih lanjut.

Catatan yang json_encode()hanya tersedia di PHP 5.2 dan lebih tinggi, jadi jika Anda menggunakan versi yang lebih lama, Anda harus menggunakan yang sudah ada - halaman manual PHP juga mencakup komentar dengan fungsi yang ditulis oleh orang-orang yang membutuhkannya. (Tapi itu mengatakan, jika Anda menggunakan sesuatu yang lebih tua dari PHP 5.2, Anda harus meningkatkan ASAP)

Spudley
sumber
Anda kehilangan titik koma di akhir array javascript, dan juga bukan itu cara PHP array diinisialisasi (coba larik ('abc' ....)) ... tetap upvote karena mungkin itu yang diinginkan OP
Daniel Sloof
@Spudley Hai, saya mencoba ini, dan dalam javascript mencoba mengakses array yang dibuat dalam php seperti itu console.log('stuff: ' + javascript_array[0]);, tetapi dikatakan javascript_arraybelum didefinisikan
Growler
Jika array PHP Anda mengandung karakter khusus, ini akan salah. Anda dapat keluar dari karakter khusus menggunakan fungsi urlencode (). Lihat jawaban saya: stackoverflow.com/questions/5618925/…
Ben Rogmans
1
Hanya untuk menunjukkan bahwa json_encode mendefinisikan objek JavaScript, BUKAN array.
Patrick Moore
1
@ PatrickMoore - jika Anda akan bertele-tele tentang itu, json_encodemengeluarkan string JSON, yang dapat mewakili objek JS atau array JS, atau bahkan nilai skalar tunggal, jika itu yang Anda berikan. Contoh dalam jawaban saya akan menampilkan array JavaScript, bukan objek.
Spudley
39

Bodoh dan sederhana:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
Eric
sumber
6
Hanya ingin tahu : apa yang akan terjadi ketika string berisi kutipan, kutipan ganda dan / atau koma?
Nis
1
Karena ada fungsi untuk ini, yang lebih disukai daripada solusi improvisasi kecuali ada alasan yang bagus; tidak ada alasan di sini yang dinyatakan.
cjbarth
berfungsi lebih baik untuk karakter unicode (urdu dalam kasus saya)
Hammad Khan
33

Anda tidak perlu memanggil parseJSON karena hasil dari json_encodeadalah javascript literal. Cukup tetapkan ke variabel 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>
Jaykishan
sumber
23

Anda dapat mengubah array php menjadi javascript menggunakan json_encodefungsi 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>
Dipesh KC
sumber
3
lingkaran itu mengerikan
Eric
2
Ya itu untuk tujuan demonstrasi :)
Dipesh KC
7
@Eric, contohnya diambil langsung karena dari pertanyaan. Saya bisa menggunakan console.log()tetapi pertanyaan itu sendiri sangat mendasar (dan pengguna banyak yang tidak memiliki pengalaman dengan alat memeriksa kode browser), jadi saya memutuskan untuk pergi dengan peringatan () karena pengguna akan melihatnya secara langsung. Tapi Anda tahu itu dengan sangat baik bukan bagian dari pertanyaan yang bersangkutan, hanya cara untuk memverifikasi apakah logika berfungsi atau tidak.
Dipesh KC
17

Saya menemukan cara tercepat dan termudah untuk bekerja dengan array PHP di Javascript adalah dengan melakukan ini:

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);?>');
pengguna3065931
sumber
10

sangat sederhana ...!

gunakan metode ini:

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

di laravel blade {{}} gunakan metode ini:

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

bekerja untuk array yang terkait dan tidak terkait.

اسماعیل زارع
sumber
1
Metode @MohammadKawsara yang digunakan bekerja paling baik untuk saya jelas jika Anda mempercayai data pengguna.
Tomas Crofty
6

kamu juga bisa melakukannya dengan cara ini

<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>
keren Quazi
sumber
6

Sangat sederhana saya menggunakan cara ini:

JAVASCRIPT :

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

Konversi array PHP ke Javascript

Salam!

Radames E. Hernandez
sumber
4

Untuk array multidimensi dalam PHP4 Anda dapat menggunakan tambahan kode berikut yang diposting oleh 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());
Sander
sumber
4

Ini adalah fungsi saya. JavaScript harus di bawah PHP, jika tidak gunakan SESI.

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

Baris terakhir bisa berupa .... teks (jsArray); dan akan ditampilkan "1,2,3,4,5,6"

japetko
sumber
3

Saya menggunakan array php palsu

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

jika array Anda tidak dikenal (sudah dibuat)

<?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>
Mik
sumber
... atau Anda dapat memasukkan () array pertama untuk mendapatkan yang "palsu". Saya tahu ini adalah respons lama, tetapi gagasan itu baru saja terlintas di benak saya.
Peter Lenjo
1
tentu, tapi cara saya adalah yang tercepat dari semua saran di halaman ini. Terkadang, kecepatan bisa menjadi faktor penting.
Mik
2

Itu bisa dilakukan dengan cara yang lebih aman.

Jika array PHP Anda mengandung karakter khusus, Anda perlu menggunakan rawurlencode () di PHP dan kemudian menggunakan decodeURIComponent () di JS untuk menghindarinya. Dan parsing JSON ke js asli. Coba ini:

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

console.log(data);
Ben Rogmans
sumber
1

Saya memiliki masalah yang sama dan ini adalah bagaimana saya melakukannya.

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

Saya harap ini membantu.

Conceptree
sumber
1

Sederhana saja:

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

Jika Anda memerlukan array PHP multidimensi yang akan dicetak langsung ke kode sumber halaman html, dan dengan cara Javascript Object Notation (alias JSON) yang dapat dibaca manusia, gunakan fungsi bagus yang saya temukan di http://php.net/manual /en/function.json-encode.php#102091 dikodekan oleh seseorang yang dijuluki "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;
}

?>       
Heitor
sumber
Tolong jangan pernah !! Sekarang kita bisa menggunakan ini: json_encode ($ array, JSON_PRETTY_PRINT); dan bahagia!
Heitor
0

Di bawah ini adalah trik yang cukup sederhana untuk mengonversi array PHP ke array JavaScript:

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

JS di bawah ini:

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

Itu bekerja seperti pesona.

pashar prashant
sumber