แปลง php array เป็น Javascript


184

ฉันจะแปลงอาร์เรย์ 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

คำตอบ:


60

คำตอบของ 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 ของคุณด้วยหากเป็นไปได้!
Spudley

5
แม้ว่าคุณจะใช้ PHP ตัวเก่าอย่าเขียนของคุณเองใช้ไลบรารี่ที่มีอยู่ซึ่งถูกดูแลรักษา / ใช้งานโดยบุคคลมากกว่าหนึ่งคน / โครงการ ดังนั้นคำตอบนี้แสดงให้เห็นว่าสามารถทำอะไรได้บ้าง แต่ไม่ควรแนะนำสิ่งนี้ - ไม่ว่าจะใช้เวอร์ชั่น PHP ก็ตาม เช่นpear.php.net/package/Services_JSON
hakre

คุณถูก. อย่างไรก็ตามรหัสดังกล่าวได้ถูกใช้ / ทดสอบมาเป็นเวลาหลายปีในโครงการขนาดใหญ่สองโครงการ
Udo G

1
BTW คุณเพิ่มการเรียก array_map และตรงไปตรงมาไม่จำเป็นต้องแก้ไขคำตอบที่ถูกต้องสมบูรณ์แบบสำหรับคำถามต้นฉบับและทำเครื่องหมายด้วย "ประกาศความปลอดภัย" เมื่อไม่มีปัญหาด้านความปลอดภัยใด ๆ
Udo G

1
@UdoG: หากคุณไม่เห็นด้วยกับการแก้ไขคุณมีอิสระที่จะแก้ไขอีกครั้งด้วยตัวคุณเอง hakre มีประเด็นที่จะมีเหตุผลสำหรับใครบางคนที่อ่านคำถามนี้เพื่อใช้ห้องสมุดที่เป็นที่รู้จักกันว่าปลอดภัยและผ่านการทดสอบอย่างดีเช่นจาก Pear แทนที่จะเป็นแค่การใช้รหัสนี้ในการทำบุญ นอกจากนี้ยังเป็นที่น่าสังเกตว่า PHP 5.2 ได้รับการสนับสนุนอยู่แล้วเมื่อมีการถามคำถามนี้ อย่างที่ฉันเขียนตอนนี้มันไม่ได้รับการสนับสนุนเป็นเวลาสองปีและรู้ปัญหาด้านความปลอดภัยที่จะไม่ได้รับการแก้ไข ดังนั้นจึงเป็นปัญหาด้านความปลอดภัยที่จะใช้ PHP 5.2 ก่อนที่เราจะพิจารณารหัสในคำตอบนี้
Spudley

437

ฉันจะสมมติว่าทั้งสองอาร์เรย์ที่คุณได้รับสำหรับ PHP และ JS นั้นไม่เกี่ยวข้องกันและเป็นเพียงตัวอย่างของวิธีที่อาร์เรย์มองในสองภาษา ชัดเจนว่าคุณจะไม่สามารถแปลงลำดับตัวอักษรและตัวเลขเหล่านั้นเป็นชื่อเมืองเหล่านั้นได้

PHP จัดเตรียมฟังก์ชันในการแปลงอาร์เรย์ PHP เป็นโค้ด Javascript: json_encode()Javascript: (โดยทางเทคนิคแล้วคือรูปแบบ 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 คุณควรอัพเกรด ASAP)


คุณพลาดเซมิโคลอนในตอนท้ายของอาร์เรย์ javascript และนั่นไม่ใช่วิธีการเริ่มต้นอาร์เรย์ PHP (ลองใช้อาร์เรย์ ('abc' .... ))) ... upvote ต่อไปเพราะอาจเป็นสิ่งที่ OP ต้องการ
Daniel สโลฟ

@ Spudley สวัสดีฉันได้ลองแล้วและในจาวาสคริปต์พยายามเข้าถึงอาเรย์ที่สร้างขึ้นใน php เช่นconsole.log('stuff: ' + javascript_array[0]);นี้ แต่มันบอกว่าjavascript_arrayยังไม่ได้รับการกำหนด
Growler

หากอาร์เรย์ PHP ของคุณมีอักขระพิเศษสิ่งนี้จะผิดปกติ คุณสามารถหลีกเลี่ยงอักขระพิเศษโดยใช้ฟังก์ชัน urlencode () ดูคำตอบของฉัน: stackoverflow.com/questions/5618925/…
Ben Rogmans

1
เพียงเพื่อชี้ให้เห็นว่า json_encode กำหนดวัตถุ JavaScript ไม่ใช่อาร์เรย์
แพทริคมัวร์

1
@PatrickMoore - ถ้าคุณจะคล่องแคล่วเกี่ยวกับมันจะjson_encodeส่งออกสตริง JSON ซึ่งสามารถเป็นตัวแทนของวัตถุ JS หรืออาร์เรย์ JS หรือแม้กระทั่งค่าสเกลาร์เดียวถ้านั่นคือสิ่งที่คุณผ่านมัน ตัวอย่างในคำตอบของฉันจะส่งออกอาร์เรย์ JavaScript ไม่ใช่วัตถุ
Spudley

39

ใบ้และเรียบง่าย:

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

6
เพิ่งเกิดจากความอยากรู้ : จะเกิดอะไรขึ้นเมื่อสตริงมีเครื่องหมายคำพูด, เครื่องหมายคำพูดคู่และ / หรือเครื่องหมายจุลภาค?
Nis

1
เนื่องจากมีฟังก์ชั่นสำหรับสิ่งนี้จึงควรได้รับความนิยมมากกว่าโซลูชันที่ได้รับการปรับแต่งในทันทีเว้นแต่จะมีเหตุผลที่ดี ไม่มีเหตุผลระบุไว้ในที่นี้
cjbarth

ใช้งานได้ดีขึ้นสำหรับตัวอักษร unicode (ภาษาอูรดูในกรณีของฉัน)
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

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

7
@ Eric ตัวอย่างถูกนำโดยตรงมันเป็นจากคำถาม ฉันสามารถใช้console.log()แต่คำถามตัวเองเป็นพื้นฐานมาก (และผู้ใช้จำนวนมากไม่ได้มีประสบการณ์กับเครื่องมือตรวจสอบรหัสเบราว์เซอร์) ดังนั้นฉันจึงตัดสินใจที่จะแจ้งเตือน () เนื่องจากผู้ใช้จะเห็นมันโดยตรง แต่คุณรู้ดีมาก ไม่ใช่ส่วนที่เกี่ยวข้องของคำถามเพียงวิธีการตรวจสอบว่าตรรกะทำงานหรือไม่
Dipesh KC

17

ฉันพบวิธีที่เร็วและง่ายที่สุดในการทำงานกับอาเรย์ PHP ใน Javascript คือ:

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 blade {{}}ใช้วิธีนี้:

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

แถวสุดท้ายสามารถเป็นข้อความ .... (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 ของคุณมีอักขระพิเศษคุณต้องใช้ rawurlencode () ใน PHP จากนั้นใช้ decodeURIComponent () ใน JS เพื่อหลีกเลี่ยงสิ่งเหล่านี้ และแยก 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. 
        }
   });
});

ฉันหวังว่ามันจะช่วย



0

หากคุณต้องการอาร์เรย์ PHP หลายมิติที่จะพิมพ์โดยตรงลงในซอร์สโค้ดหน้า html และในรูปแบบของ Javascript Object Notation (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);

มันทำงานเหมือนจับใจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.