2011-02-03 27 views
93

JavaScript変数にPHP配列変数を取得しようとしています。PHP配列をJavaScript関数に渡す

これは私のコードです:

<html> 
    <head> 
     <script type="text/javascript"> 
       function drawChart(row,day,week,month,date) 
       { 
        // Some code... 
       } 
     </script> 
    </head> 

    <body> 
     <?php 
      for($counter = 0; $counter<count($au); $counter++) 
      { 
       switch($au[$counter]->id) 
       { 
        case pageID.'/insights/page_active_users/day': 
         $day[] = $au[$counter]->value; 
        break; 
        case pageID.'/insights/page_active_users/week': 
         $week[] = $au[$counter]->value; 
        break; 
        case pageID.'/insights/page_active_users/month': 
         $month[] = $au[$counter]->value; 
        break; 
       } 
      } 
     ?> 
     <script> 
      drawChart(600/50, '<?php echo $day; ?>', '<?php echo $week; ?>', '<?php echo $month; ?>', '<?php echo createDatesArray(cal_days_in_month(CAL_GREGORIAN, date('m',strtotime('-1 day')), date('Y',strtotime('-1 day')))); ?>'); 
     </script> 
    </body> 
</html> 

私はPHPの配列の値を取得することはできません。

この問題を解決するにはどうすればよいですか?

答えて

8

次の例では、あなたがPHPの配列を持って、その後、最初にPHPの配列によってJavaScriptの配列を作成します:

以下のような JSON.parse(..)を使用することです
<script type="javascript"> 
    day = new Array(<?php echo implode(',', $day); ?>); 
    week = new Array(<?php echo implode(',',$week); ?>); 
    month = new Array(<?php echo implode(',',$month); ?>); 

    <!-- Then pass it to the JavaScript function: --> 

    drawChart(<?php echo count($day); ?>, day, week, month); 
</script> 
+0

PHPを使用する際にAjaxを使用するポイントは何ですか?PHPをスクリプトに直接挿入することはできますか? – Abdul

+1

あなたはajaxを使わずにボタンクリックでPHPコードを実行することはできません – Black

150

JSONを使用してください。

$php_variableには、任意のPHP変数を使用できます。あなたのコードで

<script type="text/javascript"> 
    var obj = <?php echo json_encode($php_variable); ?>; 
</script> 

は、次のように使用できます。

drawChart(600/50, <?php echo json_encode($day); ?>, ...) 

あなたは(AJAXリクエストのように)JSON文字列からオブジェクトを解析する必要がある場合には、安全な方法を

var s = "<JSON-String>"; 
var obj = JSON.parse(s); 
+1

単純に 'var obj = <?php echo json_encode($ php_variable);と書かれた場合の短所は何ですか? ?>; '? PHPがJSONオブジェクトをスクリプトで構文解析できるようにしっかりとエンコードしないのですか? – YMMD

+0

はい、それは*道です。しかし私の意図は、JSON.parse()を文字列から構文解析する安全な方法の1つとして置くことでした。指してくれてありがとう、私は私の投稿を編集します。 – SuperSaiyan

+1

var data = <?php echo json_encode($ registos); ?>; SyntaxError:予期しないトークン< –

48

次の2つのプラットフォーム間の

<?php $phpArray = array(
      0 => "Mon", 
      1 => "Tue", 
      2 => "Wed", 
      3 => "Thu", 
      4 => "Fri", 
      5 => "Sat", 
      6 => "Sun", 

    ) 
?> 

<script type="text/javascript"> 

    var jArray= <?php echo json_encode($phpArray); ?>; 

    for(var i=0;i<6;i++){ 
     alert(jArray[i]); 
    } 

</script> 
+0

お手伝いできますか? 'permission [1] = 0' PHP配列は' 'permission ':{" 1 ":[" 0 "]}'のようにオブジェクトになり、 'permission [0] = 0'は配列のままです。 –

+0

ちょっと@ shyammakwana.meあなたは入れ子になった配列を作っていて、json_encode()の前にprint_r($ array)をチェックして、配列が上記と同じかどうか確認してください。 –

+0

こんにちは@Tarunは返事をありがとう、はい私の配列は '$ p [1] [0] = 0;'のようなものです。これを克服する方法は? –

11

データ転送は、共通のデータ形式を必要とPHPのjson_encode()*関数を使用して、JavaScriptのにPHPの配列を変換することができます。 JSONは、クロスプラットフォームデータを送信する共通のグローバルフォーマットです。

drawChart(600/50, JSON.parse('<?php echo json_encode($day); ?>'), JSON.parse('<?php echo json_encode($week); ?>'), JSON.parse('<?php echo json_encode($month); ?>'), JSON.parse('<?php echo json_encode(createDatesArray(cal_days_in_month(CAL_GREGORIAN, date('m',strtotime('-1 day')), date('Y',strtotime('-1 day'))))); ?>')) 

これはあなたの質問に対する答えです。答えは非常に複雑に見えるかもしれません。あなたは、すなわちクライアントアプリケーションに戻っJavaScriptをデータを送信するために必要とされるJSON形式にサーバ側とクライアント側との通信here

$employee = array(
"employee_id" => 10011, 
    "Name" => "Nathan", 
    "Skills" => 
    array(
      "analyzing", 
      "documentation" => 
      array(
       "desktop", 
       "mobile" 
      ) 
     ) 
); 

変換を記述する簡単な例を見ることができます。 PHPには、json_encode()関数が組み込まれています。これは、あらゆるデータをJSON形式に変換できます。 json_encode関数の出力は、このような文字列になります。

{ 
    "employee_id": 10011, 
    "Name": "Nathan", 
    "Skills": { 
     "0": "analyzing", 
     "documentation": [ 
      "desktop", 
      "mobile" 
     ] 
    } 
} 

クライアント側では、成功関数がJSON文字列を取得します。 JavascriptにはJSON構文解析関数JSON.parse()もあります。この関数は、文字列をJSONオブジェクトに変換することができます。

$.ajax({ 
     type: 'POST', 
     headers: { 
      "cache-control": "no-cache" 
     }, 
     url: "employee.php", 
     async: false, 
     cache: false, 
     data: { 
      employee_id: 10011 
     }, 
     success: function (jsonString) { 
      var employeeData = JSON.parse(jsonString); // employeeData variable contains employee array. 
    }); 
+0

それは私のために働いた、ありがとう:) – zachu

+0

私のための時間のかかる問題を解決しました。ありがとう! – GDT

+1

あまりにも悪い "ここ"のリンクは現在死んでいます。 –

関連する問題