जावास्क्रिप्ट के लिए php सरणी परिवर्तित करें


182

मैं इस तरह एक प्रारूप में एक 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
)

नीचे दिए गए प्रारूप में एक जावास्क्रिप्ट सरणी के लिए?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];

3
क्या आप अपना प्रश्न स्पष्ट कर सकते हैं? क्या आप वास्तव में एक जावास्क्रिप्ट सरणी बनाने की कोशिश कर रहे हैं, या क्या आप एक स्ट्रिंग बनाने की कोशिश कर रहे हैं जिसे आप एक scriptटैग में डाल सकते हैं जो इसे बनाएगा, या क्या आप एक अजाक्स अनुरोध के जवाब में वापस भेजने के लिए JSON बनाने की कोशिश कर रहे हैं , या ... (यह भी, जब आप अपना प्रश्न पूछ रहे हों, तो दाईं ओर स्थित फ़ॉर्मेट बॉक्स की जाँच कैसे करें , और प्रश्न क्षेत्र के ठीक ऊपर [?] से जुड़ा पृष्ठ ।)
टीजे क्राउडर

जवाबों:


59

स्पुडली का जवाब ठीक है

सुरक्षा सूचना: निम्नलिखित आपके लिए अब आवश्यक नहीं होना चाहिए

यदि आपके पास 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 को अपग्रेड करने पर भी विचार करना चाहिए यदि संभव हो तो!
स्पडली

5
यहां तक ​​कि अगर आप पुराने PHP का उपयोग कर रहे हैं, तो अपना स्वयं का लेखन न करें, एक मौजूदा पुस्तकालय लें जिसे एक से अधिक व्यक्ति / परियोजना द्वारा बनाए रखा / उपयोग किया जाता है। तो यह उत्तर केवल यह दिखा रहा है कि कुछ कैसे किया जा सकता है, लेकिन इसे इसकी अनुशंसा नहीं करनी चाहिए - चाहे वह PHP संस्करण की ही क्यों न हो। जैसे pear.php.net/package/Services_JSON
hakre

आप सही हे। हालाँकि, उपरोक्त कोड का उपयोग दो बड़ी परियोजनाओं में वर्षों से किया गया है।
उडो जी

1
BTW, आपने array_map कॉल जोड़ा। और, ईमानदारी से, मूल प्रश्न का पूरी तरह से मान्य उत्तर को संपादित करने और इसे "सुरक्षा सूचना" के साथ चिह्नित करने की आवश्यकता नहीं है जब यह किसी भी सुरक्षा मुद्दों को नहीं उठाता है।
उडो जी

1
@ यूडीजी: यदि आप किसी संपादन से असहमत हैं, तो आप इसे फिर से स्वयं संपादित करने के लिए स्वतंत्र हैं। hakre का कहना है कि यह समझदार होगा कि यह प्रश्न पढ़ने वाले किसी व्यक्ति के लिए एक पुस्तकालय का उपयोग करना है जिसे सुरक्षित और अच्छी तरह से परीक्षण किया जाना चाहिए, जैसे कि Pear से केवल मेरिट पर इस कोड को लेने के बजाय। इसके अलावा, यह इंगित करने के लायक है कि PHP 5.2 पहले से ही समर्थन से बाहर था जब यह प्रश्न पूछा गया था। जैसा कि मैं अब लिखता हूं, यह दो साल से असमर्थित है और ऐसे सुरक्षा मुद्दों को जानता है जिन्हें पैच नहीं किया जाएगा। इसलिए यह केवल PHP 5.2 का उपयोग करने के लिए एक सुरक्षा मुद्दा है, इससे पहले कि हम इस उत्तर में कोड पर भी विचार करें।
स्पडली

435

मैं यह मानकर चल रहा हूं कि PHP और JS के लिए आपके द्वारा दिए गए दो सरणियाँ संबंधित नहीं हैं, और वे केवल उदाहरण हैं कि दो भाषाओं में सरणियाँ कैसे दिखती हैं। स्पष्ट रूप से आप अक्षरों और संख्याओं के उन अनुक्रमों को उन शहर के नामों में बदलने में सक्षम नहीं होंगे।

PHP जावास्क्रिप्ट सरणियों को जावास्क्रिप्ट कोड में बदलने के लिए एक फ़ंक्शन प्रदान करता है json_encode():। (तकनीकी रूप से, यह JSON प्रारूप है; JSON का अर्थ जावास्क्रिप्ट ऑब्जेक्ट संकेतन है)

इसे इस तरह उपयोग करें:

<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 को अपग्रेड करना चाहिए)


आप जावास्क्रिप्ट सरणी के अंत में एक अर्धविराम याद कर रहे हैं, और यह भी कि जिस तरह से PHP सरणियों को आरंभीकृत नहीं किया जाता है (सरणी ('abc' ....)) ... वैसे भी अपवोट हो जाता है क्योंकि इसकी शायद ओपी चाहता है
डैनियल स्लॉफ़

@Spudley हाय, मैंने यह कोशिश की, और जावास्क्रिप्ट में php में बनाए गए एरे को इस तरह एक्सेस करने की कोशिश की console.log('stuff: ' + javascript_array[0]);, लेकिन यह कहता javascript_arrayहै कि परिभाषित नहीं किया गया है
ग्रोलेर

यदि आपके PHP सरणी में विशेष वर्ण हैं, तो यह गलत होगा। आप urlencode () फ़ंक्शन का उपयोग करके विशेष वर्णों से बच सकते हैं। मेरा उत्तर देखें: stackoverflow.com/questions/5618925/…
बेन रोजमैन्स

1
केवल यह बताने के लिए कि json_encode एक जावास्क्रिप्ट ऑब्जेक्ट को परिभाषित करता है, एक सरणी नहीं
पैट्रिक मूर

1
@PatrickMoore - यदि आप इसके बारे में पांडित्यपूर्ण होने जा रहे हैं, तो json_encodeएक JSON स्ट्रिंग आउटपुट करता है, जो या तो JS ऑब्जेक्ट या JS सरणी, या यहां तक ​​कि एक स्केलर वैल्यू का प्रतिनिधित्व कर सकता है, यदि आप इसे पास करते हैं। मेरे उत्तर में दिए गए उदाहरण जावास्क्रिप्ट सरणी का उत्पादन करेंगे, न कि किसी वस्तु का।
स्पडली

38

गूंगा और सरल:

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

6
जिज्ञासा से बाहर : क्या होगा जब स्ट्रिंग में उद्धरण, डबल उद्धरण और / या अल्पविराम शामिल होंगे।
निस

1
चूंकि इसके लिए एक फ़ंक्शन है, जिसे तब तक सुधारित समाधान पर पसंद किया जाना चाहिए जब तक कि कोई अच्छा कारण न हो; कोई कारण नहीं बताया गया है।
cjbarth

यूनिकोड के पात्रों के लिए बेहतर काम करता है (मेरे मामले में urdu)
हम्माद खान

33

आपको जावास्क्रिप्ट को कॉल करने की आवश्यकता नहीं है क्योंकि आउटपुट json_encodeएक जावास्क्रिप्ट शाब्दिक है। बस इसे एक 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
वह लूप भयानक है
एरिक

2
खैर यह प्रदर्शन उद्देश्य के लिए था :)
दीपेश के सी।

7
@ उदाहरण से सीधे प्रश्न के रूप में लिया गया था । मैं इस्तेमाल कर सकता था, console.log()लेकिन सवाल खुद बहुत बुनियादी है (और उपयोगकर्ता के पास ब्राउज़र कोड निरीक्षण उपकरण के साथ अनुभव नहीं है), इसलिए मैंने अलर्ट () के साथ जाने का फैसला किया क्योंकि उपयोगकर्ता इसे सीधे देख लेंगे। लेकिन आप इसे अच्छी तरह जानते हैं। सवाल का संबंधित हिस्सा नहीं है, यह सत्यापित करने का एक तरीका है कि तर्क काम करता है या नहीं।
दीपेश केसी

17

मुझे जावास्क्रिप्ट में 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 का उपयोग करने का तरीका मेरे लिए सबसे अच्छा काम करता है।
टॉमस क्रॉफ्ट

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>


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

यह मेरा कार्य है। जावास्क्रिप्ट PHP के तहत होना चाहिए अन्यथा सत्र का उपयोग करें।

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

... या आप "नकली" एक पाने के लिए पहला सरणी निहित कर सकते हैं। मुझे पता है कि यह एक पुरानी प्रतिक्रिया है, लेकिन विचार ने मेरे दिमाग को पार कर दिया।
पीटर लेनजो

1
यकीन है, लेकिन मेरा तरीका इस पृष्ठ पर सभी सुझावों का सबसे तेज है। कभी-कभी, गति एक महत्वपूर्ण कारक हो सकती है।
मिक

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

मुझे उम्मीद है यह मदद करेगा।



0

यदि आपको HTML पेज सोर्स कोड में एक बहुआयामी PHP सरणी को सीधे मुद्रित करने की आवश्यकता है, और एक इंडेंटेड मानव-पठनीय जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (उर्फ जोंस) फैशन में, इस अच्छे फ़ंक्शन का उपयोग करें जो मुझे http://php.net पर प्राप्त हुआ है। /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); और खुश रहो!
हेइटर

0

नीचे PHP सरणी को जावास्क्रिप्ट सरणी में बदलने के लिए एक बहुत ही सरल चाल है:

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

जेएस नीचे:

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

यह एक सम्मोहन की तरह काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.