PHP配列をJavaScriptに変換


185

このような形式の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タグに挿入できる文字列を作成しようとしているのか、それともajaxリクエストへの応答として返信するJSONを作成しようとしているのか、それとも... (また、質問をするときは右側にある「フォーマット方法」ボックスと、質問領域のすぐ上の[?]からリンクされているページを確認することをお勧めします。)
TJ Crowder

回答:


60

スパッドリーの答えは結構です。

セキュリティに関する通知: 以下は必要ありません。

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を作成する必要があります。ただし、可能であれば、PHPのアップグレードも検討してください。
Spudley

5
古いPHPを使用している場合でも、独自のPHPを作成するのではなく、複数の人/プロジェクトによって保守/使用されている既存のライブラリを使用してください。したがって、この答えは何かができる方法を示しているだけですが、PHPのバージョンに関係なく、これはお勧めできません。例:pear.php.net/package/Services_JSON
hakre

あなたが正しい。ただし、上記のコードは2つの大規模プロジェクトで長年使用/テストされてきました。
Udo G

1
ところで、あなたはarray_map呼び出し追加しました。また、正直なところ、元の質問に対する完全に有効な回答を編集して、セキュリティ上の問題が発生しない場合は「セキュリティ通知」でマークする必要はありません。
Udo G

1
@UdoG:編集に同意できない場合は、自分でもう一度編集できます。hakreは、この質問を読んでいる誰かが、このコードを単にメリットとするのではなく、たとえばPearから、安全で十分にテストさていることがわかっているライブラリを使用することは賢明であると指摘しています。また、この質問が尋ねられたとき、PHP 5.2はすでにサポートされていなかったことを指摘する価値があります。今書いているように、2年間サポートされておらず、パッチが適用されない既知のセキュリティ問題があります。したがって、この回答のコードを検討する前に、単にPHP 5.2を使用することはセキュリティ上の問題です。
Spudley 2013

439

PHPとJSに指定した2つの配列は関連していないと想定します。これらは、2つの言語で配列がどのように表示されるかを示す例にすぎません。明らかに、これらの文字と数字のシーケンスを都市名に変換することはできません。

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より古いバージョンを使用している場合は、できるだけ早くアップグレードする必要があります)


JavaScript配列の末尾にセミコロンがないため、PHP配列が初期化される方法ではありません(array( 'abc' ....)を試してください)...とにかくOPが望んでいるので賛成します
ダニエルSloof

こんにちは@Spudley、私はこれを試みたが、JavaScriptでのようなPHPで作成された配列にアクセスしようとしたconsole.log('stuff: ' + javascript_array[0]);が、それは言うjavascript_array定義されていない
グロウラー

PHP配列に特殊文字が含まれている場合、これはうまくいきません。urlencode()関数を使用して特殊文字をエスケープできます。私の答えを参照してください。stackoverflow.com/questions/5618925/...
ベンRogmans

1
ただ、json_encodeは、JavaScriptのオブジェクト、定義することを指摘しないで配列を。
Patrick Moore

1
@PatrickMoore-あなたがそれについて熟慮しようとしているならjson_encode、それがあなたがそれを渡すものであれば、JSオブジェクトまたはJS配列、あるいは単一のスカラー値を表すことができるJSON文字列を出力します。私の回答の例では、オブジェクトではなくJavaScript配列が出力されます。
Spudley、2018

39

ばかでシンプル:

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

6
好奇心から抜け出して:文字列にquote、二重引用符、および/またはコンマが含まれている場合はどうなりますか?
Nis

1
これには関数があるため、正当な理由がない限り、即席のソリューションよりも優先する必要があります。ここでは理由は述べられていません。
cjbarth 14

ユニコード文字(私の場合はウルドゥー語)の方がうまく機能します
Hammad Khan

33

出力json_encodeはJavaScriptリテラルであるため、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配列を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>

3
そのループはひどい
Eric

2
まあそれはデモンストレーションの目的でした:)
Dipesh KC

7
@Ericの例はそのまま質問から取られたものです。私は使用できたかもしれませんconsole.log()が、質問自体は非常に基本的であり(そして多くのユーザーはブラウザーコード検査ツールの経験がないため)、ユーザーが直接目にするため、alert()を使用することにしました。は質問の関係する部分ではなく、ロジックが機能するかどうかを確認する方法にすぎません。
Dipesh KC

17

私は、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);?>');

10

とても簡単 ...!

この方法を使用します。

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

laravelブレード{{}}では、この方法を使用します。

{{ 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の配列あなたは、コードに次のオプションを使用することができウド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()して「偽の」配列を取得することもできます。私はこれが古い反応であることを知っていますが、その考えはちょうど私の心を超えました。
Peter Lenjo、

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

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.