Konvertieren Sie das PHP-Array in Javascript

181

Wie kann ich ein PHP-Array in ein solches Format konvertieren?

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
)

zu einem Javascript-Array im folgenden Format?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];
user663878
quelle
3
Können Sie Ihre Frage klären? Versuchen Sie wirklich, ein JavaScript-Array zu erstellen, oder versuchen Sie, eine Zeichenfolge zu erstellen, die Sie in ein scriptTag einfügen können, mit dem es erstellt wird, oder versuchen Sie, JSON zu erstellen , um es als Antwort auf eine Ajax-Anfrage zurückzusenden, oder ... (Es lohnt sich auch, das Feld Formatieren auf der rechten Seite zu lesen, wenn Sie Ihre Frage stellen, und die Seite, die über [?] Direkt über dem Fragenbereich verlinkt ist.)
TJ Crowder

Antworten:

59

Spudleys Antwort ist in Ordnung .

Sicherheitshinweis: Folgendes sollte für Sie nicht mehr erforderlich sein

Wenn Sie nicht über PHP 5.2 verfügen, können Sie Folgendes verwenden:

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), ';';
Udo G.
quelle
2
Einverstanden: Wenn Sie altes PHP verwenden, müssen Sie Ihr eigenes schreiben. Sie sollten jedoch auch in Betracht ziehen, Ihr PHP zu aktualisieren, wenn dies überhaupt möglich ist!
Spudley
5
Selbst wenn Sie altes PHP verwenden, schreiben Sie kein eigenes, sondern verwenden Sie eine vorhandene Bibliothek, die von mehr als einer Person / einem Projekt verwaltet / verwendet wird. Diese Antwort zeigt also nur, wie etwas getan werden kann, sollte dies jedoch nicht empfehlen - unabhängig von der PHP-Version. ZB pear.php.net/package/Services_JSON
hakre
Du hast recht. Der obige Code wird jedoch seit Jahren in zwei großen Projekten verwendet / getestet.
Udo G
1
Übrigens haben Sie den Aufruf array_map hinzugefügt. Und ehrlich gesagt ist es nicht erforderlich, eine vollständig gültige Antwort auf die ursprüngliche Frage zu bearbeiten und sie mit einem "Sicherheitshinweis" zu kennzeichnen, wenn keine Sicherheitsprobleme auftreten.
Udo G
1
@UdoG: Wenn Sie mit einer Bearbeitung nicht einverstanden sind, können Sie sie selbst erneut bearbeiten. hakre ist der Ansicht, dass es für jemanden, der diese Frage liest, sinnvoll wäre, eine Bibliothek zu verwenden, die als sicher und gut getestet bekannt ist, z. B. von Pear, anstatt diesen Code nur als Verdienst zu betrachten. Es ist auch erwähnenswert, dass PHP 5.2 bereits nicht unterstützt wurde, als diese Frage gestellt wurde. Während ich jetzt schreibe, wird es seit zwei Jahren nicht mehr unterstützt und es sind Sicherheitsprobleme bekannt, die nicht behoben werden. Es ist daher ein Sicherheitsproblem, einfach PHP 5.2 zu verwenden, bevor wir den Code in dieser Antwort überhaupt berücksichtigen.
Spudley
435

Ich gehe davon aus, dass die beiden Arrays, die Sie für PHP und JS angegeben haben, nicht miteinander verwandt sind, und sie sind nur Beispiele dafür, wie Arrays in den beiden Sprachen aussehen. Natürlich werden Sie diese Buchstaben- und Zahlenfolgen nicht in diese Städtenamen umwandeln können.

PHP bietet eine Funktion zum Konvertieren von PHP-Arrays in Javascript-Code : json_encode(). (Technisch gesehen ist es das JSON-Format. JSON steht für JavaScript Object Notation.)

Verwenden Sie es so:

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

Weitere Informationen finden Sie auch auf der oben verlinkten Handbuchseite.

Beachten Sie, dass dies json_encode()nur in PHP 5.2 und höher verfügbar ist. Wenn Sie also eine ältere Version verwenden, müssen Sie eine vorhandene verwenden. Die PHP-Handbuchseite enthält auch Kommentare mit Funktionen, die von Personen geschrieben wurden, die sie benötigten. (Das heißt, wenn Sie etwas älteres als PHP 5.2 verwenden, sollten Sie so schnell wie möglich aktualisieren)

Spudley
quelle
Sie vermissen ein Semikolon am Ende des Javascript-Arrays, und auch so werden PHP-Arrays nicht initialisiert (versuchen Sie das Array ('abc' ....)) ... stimmen Sie trotzdem zu, weil es wahrscheinlich das ist, was OP will
Daniel Sloof
@Spudley Hallo, ich habe es versucht und im Javascript versucht, auf das in PHP als solches erstellte Array zuzugreifen console.log('stuff: ' + javascript_array[0]);, aber es heißt, es javascript_arraywurde nicht definiert
Growler
Wenn Ihr PHP-Array Sonderzeichen enthält, geht dies schief. Sie können Sonderzeichen mit den Funktionen urlencode () umgehen. Siehe meine Antwort: stackoverflow.com/questions/5618925/…
Ben Rogmans
1
Nur um darauf hinzuweisen, dass json_encode ein JavaScript-Objekt definiert, NICHT ein Array.
Patrick Moore
1
@PatrickMoore - Wenn Sie pedantisch sind, wird json_encodeeine JSON-Zeichenfolge ausgegeben , die entweder ein JS-Objekt oder ein JS-Array oder sogar einen einzelnen Skalarwert darstellen kann, wenn Sie dies übergeben. Die Beispiele in meiner Antwort geben ein JavaScript-Array aus, kein Objekt.
Spudley
38

Dumm und einfach:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
Eric
quelle
6
Nur aus Neugier : Was würde passieren, wenn der String Anführungszeichen, doppelte Anführungszeichen und / oder Komma enthält?
Ni
1
Da es dafür eine Funktion gibt, sollte diese einer improvisierten Lösung vorgezogen werden, es sei denn, es gibt einen guten Grund; Hierin wird kein Grund angegeben.
CJBarth
funktioniert besser für Unicode-Zeichen (Urdu in meinem Fall)
Hammad Khan
33

Sie müssen parseJSON nicht aufrufen, da die Ausgabe von json_encodeein Javascript-Literal ist. Weisen Sie es einfach einer js-Variablen zu.

<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>
Jaykishan
quelle
23

Sie können PHP-Arrays mit der PHP- json_encodeFunktion in Javascript konvertieren

<?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>
Dipesh KC
quelle
3
Eric
2
Nun, das war zu Demonstrationszwecken :)
Dipesh KC
7
@Eric das Beispiel wurde direkt so genommen, wie es aus der Frage stammt. Ich hätte es verwenden können, console.log()aber die Frage selbst ist sehr einfach (und viele Benutzer haben keine Erfahrung mit dem Tool zur Überprüfung des Browsercodes), daher habe ich mich für alert () entschieden, da der Benutzer sie direkt sehen wird. Aber Sie kennen sie sehr gut ist nicht der betroffene Teil der Frage, sondern nur eine Möglichkeit zu überprüfen, ob die Logik funktioniert oder nicht.
Dipesh KC
17

Ich finde, der schnellste und einfachste Weg, mit einem PHP-Array in Javascript zu arbeiten, ist folgender:

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);?>');
user3065931
quelle
10

so einfach ...!

Verwenden Sie diese Methode:

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

Verwenden Sie in Laravel Blade {{}} diese Methode:

{{ str_replace('&quot;', '', json_encode($your_array)) }} 

Arbeiten für zugeordnete und nicht zugeordnete Arrays.

اسماعیل زارع
quelle
1
Die verwendete Methode @MohammadKawsara funktioniert für mich natürlich am besten, wenn Sie den Benutzerdaten vertrauen.
Tomas Crofty
6

Sie können dies auch auf diese Weise tun

<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>
cooler Quazi
quelle
5

Ist sehr einfach, ich benutze diesen Weg:

JAVASCRIPT :

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

Konvertieren Sie das PHP-Array in Javascript

Grüße!

Radames E. Hernandez
quelle
4

Für ein mehrdimensionales Array in PHP4 können Sie den folgenden Zusatz zu dem von Udo G veröffentlichten Code verwenden:

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());
Sander
quelle
4

Das ist meine Funktion. JavaScript muss unter PHP sein, andernfalls verwenden Sie 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>

Letzte Zeile kann sein .... text (jsArray); und wird gezeigt "1,2,3,4,5,6"

japetko
quelle
3

Ich benutze ein gefälschtes PHP-Array

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

falls jemals dein Array unbekannt ist (bereits erstellt)

<?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>
Mik
quelle
... oder Sie könnten das erste Array implodieren (), um das "falsche" zu erhalten. Ich weiß, dass dies eine alte Antwort ist, aber die Idee kam mir gerade in den Sinn.
Peter Lenjo
1
sicher, aber mein Weg ist der schnellste aller Vorschläge auf dieser Seite. Manchmal kann Geschwindigkeit ein wichtiger Faktor sein.
Mik
2

Dies kann sicherer erfolgen.

Wenn Ihr PHP-Array Sonderzeichen enthält, müssen Sie rawurlencode () in PHP verwenden und dann decodeURIComponent () in JS verwenden, um diese zu umgehen. Und analysieren Sie den JSON in native js. Versuche dies:

var data = JSON.parse(
        decodeURIComponent(
            "<?=rawurlencode(json_encode($data));?>"
        )
    );

console.log(data);
Ben Rogmans
quelle
1

Ich hatte das gleiche Problem und so habe ich es gemacht.

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

Ich hoffe, es hilft.

Konzept
quelle
1

Halte es einfach :

var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');
Fifi
quelle
0

Wenn Sie ein mehrdimensionales PHP-Array benötigen, das direkt in den Quellcode der HTML-Seite und in eingerückter, von Menschen lesbarer Javascript Object Notation (auch bekannt als JSON) gedruckt werden soll, verwenden Sie diese nette Funktion, die ich unter http://php.net/manual gefunden habe /en/function.json-encode.php#102091, codiert von jemandem mit dem Spitznamen "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;
}

?>       
Heitor
quelle
Bitte vergiss es !! Jetzt können wir einfach Folgendes verwenden: json_encode ($ array, JSON_PRETTY_PRINT); und sei glücklich!
Heitor
0

Im Folgenden finden Sie einen ziemlich einfachen Trick zum Konvertieren eines PHP-Arrays in ein JavaScript-Array:

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

JS unten:

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

Es wirkt wie ein Zauber.

prashant parmar
quelle