PHP 배열을 자바 스크립트로 변환


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 을 만들어 아약스 요청에 대한 회신으로 다시 보내 려고 합니까? (또한 질문 할 때 오른쪽에있는 형식 지정 방법 상자와 질문 영역 바로 위의 [?] 에서 링크 된 페이지 를 확인하는 것이 좋습니다.)
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

네가 옳아. 그러나 위의 코드는 두 개의 큰 프로젝트에서 수년 동안 사용 / 테스트되었습니다.
우도 G

1
BTW, array_map 호출 추가했습니다. 솔직히 말해서, 원래 질문에 대한 완벽한 대답을 편집 할 필요가 없으며 보안 문제가 발생하지 않을 때 "보안 공지"로 표시 할 필요가 없습니다.
Udo G

1
@UdoG : 편집 내용에 동의하지 않으면 직접 편집 할 수 있습니다. hakre는이 질문을 읽는 사람이 안전하고 잘 테스트 된 것으로 알려진 라이브러리를 사용하는 것이 합리적이라고 지적합니다 . 또한이 질문을 받았을 때 PHP 5.2가 이미 지원되지 않았다는 점을 지적 할 가치가 있습니다. 내가 지금 쓰는 것처럼 2 년 동안 지원되지 않았으며 패치되지 않는 알려진 보안 문제가 있습니다. 따라서이 답변의 코드를 고려하기 전에 단순히 PHP 5.2를 사용하는 것이 보안 문제입니다.
Spudley

437

PHP와 JS에 대해 제공 한 두 배열은 서로 관련이 없으며 두 언어로 배열이 어떻게 보이는지에 대한 예일 뿐이라고 가정하겠습니다. 분명히 당신은 문자와 숫자의 순서를 도시 이름으로 변환 할 수 없을 것입니다.

PHP는 PHP 배열을 Javascript 코드로 변환하는 기능을 제공합니다 json_encode(). (기술적으로 JSON 형식입니다 .JSON은 JavaScript 객체 표기법을 나타냅니다)

다음과 같이 사용하십시오.

<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 이전 버전을 사용하는 경우 최대한 빨리 업그레이드해야합니다.)


당신의 길에 PHP 배열을 초기화하지 않는 것이 또한 자바 스크립트 배열의 끝에 세미콜론을 누락하고있어 (시도 배열 ( 'ABC'....)) ... upvote에 어쨌든 그 아마 어떤 영업 이익은 원하기 때문에
다니엘 Sloof

안녕하세요 @Spudley, 나는이 시도하고, 자바 스크립트 같은 PHP에서 만든 배열에 접근하려 console.log('stuff: ' + javascript_array[0]);하지만,라고 javascript_array정의되지 않은
그라 울러

PHP 배열에 특수 문자가 포함되어 있으면 잘못됩니다. urlencode () 함수를 사용하여 특수 문자를 이스케이프 할 수 있습니다. 내 답변보기 : stackoverflow.com/questions/5618925/…
Ben Rogmans

1
json_encode 가 배열이 아닌 JavaScript 객체를 정의한다는 것을 지적하십시오 .
Patrick Moore

1
@PatrickMoore-당신이 그것에 대해 pedantic하려는 경우, json_encodeJSON 객체를 출력합니다.이 문자열은 JS 객체 또는 JS 배열 또는 단일 스칼라 값을 나타낼 수 있습니다. 내 대답의 예제는 객체가 아닌 JavaScript 배열을 출력합니다.
Spudley

39

멍청하고 간단한 :

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

6
호기심에서 : 문자열에 quote, 큰 따옴표 및 / 또는 쉼표가 포함되면 어떻게됩니까?
Nis

1
이것에 대한 기능이 있기 때문에, 정당한 이유가없는 한 즉흥적 인 해결책보다 선호되어야합니다. 여기에 어떠한 이유도 명시되어 있지 않습니다.
cjbarth

유니 코드 문자 (제 경우에는 우르두어)에서 더 잘 작동합니다.
Hammad Khan

33

출력은 json_encode자바 스크립트 리터럴 이므로 parseJSON을 호출 할 필요가 없습니다 . 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
@ 에릭 예제는 질문에서 나온 그대로 직접 가져 왔습니다 . 나는 사용할 수 console.log()있었지만 질문 자체는 매우 기본적이며 (사용자는 브라우저 코드 검사 도구에 대한 경험이 없으므로) 사용자가 직접 볼 수 있기 때문에 alert ()으로 가기로 결정했습니다. 문제의 관련 부분이 아니라 논리가 작동하는지 여부를 확인하는 방법입니다.
Dipesh KC

17

Javascript에서 PHP 배열로 작업하는 가장 빠르고 쉬운 방법은 다음과 같습니다.

PHP :

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

자바 스크립트 :

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

라 라벨 블레이드 {{}}에서 다음 방법을 사용하십시오.

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

이 방법을 사용하는 것은 매우 간단합니다.

자바 스크립트 :

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

PHP 배열을 자바 스크립트로 변환

문안 인사!


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 () 할 수 있습니다. 나는 이것이 오래된 반응이라는 것을 알고 있지만 아이디어는 내 마음을 넘어 섰습니다.
피터 렌조

1
그러나이 방법에 대한 모든 제안 중에서 가장 빠른 방법은 제 방법입니다. 때로는 속도가 중요한 요소 일 수 있습니다.
Mik

2

더 안전한 방식으로 수행 할 수 있습니다.

PHP 배열에 특수 문자가 포함 된 경우 PHP에서 rawurlencode ()를 사용한 다음 JS에서 decodeURIComponent ()를 사용하여 해당 문자를 이스케이프해야합니다. 그리고 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 객체 표기법 (일명 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.