Php dizisini Javascript'e dönüştürme


185

Bir PHP dizisini böyle bir formatta nasıl dönüştürebilirim

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
)

aşağıdaki formatta bir Javascript dizisine?

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

3
Sorunuzu açıklığa kavuşturabilir misiniz? Gerçekten bir JavaScript dizisi oluşturmaya mı çalışıyorsunuz yoksa onu oluşturacak bir scriptetikete koyabileceğiniz bir dize oluşturmaya mı çalışıyorsunuz , yoksa bir ajax isteğine yanıt olarak geri göndermek için JSON oluşturmaya mı çalışıyorsunuz , yoksa ... (Ayrıca, kontrol değer Nasıl Format Eğer soruyu soruyorsun zaman sağ taraftaki kutusu ve sayfa bağlantılı dan [?] sadece soru alanının üzerinde.)
TJ Crowder

Yanıtlar:


60

Spudley'nin yanıtı iyi .

Güvenlik Uyarısı: Aşağıdakiler sizin için artık gerekli olmamalıdır

PHP 5.2'niz yoksa böyle bir şey kullanabilirsiniz:

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
kabul etti: Eski PHP kullanıyorsanız ve kendi PHP'nizi yazmanız gerekir. Ancak, mümkünse PHP'nizi yükseltmeyi de düşünmelisiniz!
Spudley

5
Eski PHP kullanıyor olsanız bile, kendiniz yazmayın, birden fazla kişi / proje tarafından korunan / kullanılan mevcut bir kütüphaneyi alın. Yani bu cevap sadece bir şeyin nasıl yapılabileceğini gösteriyor, ancak PHP sürümü ne olursa olsun bunu önermemelidir. Örneğin pear.php.net/package/Services_JSON
hakre

Haklısın. Ancak, yukarıdaki kod iki büyük projede yıllarca kullanılmıştır / test edilmiştir.
Udo G

1
BTW, sen array_map çağrıyı ekledi. Ve dürüst olmak gerekirse, orijinal soruya tam olarak geçerli bir yanıtı düzenlemeye ve herhangi bir güvenlik sorunu yaşanmadığında "Güvenlik Bildirimi" ile işaretlemeye gerek yoktur.
Udo G

1
@UdoG: Bir düzenlemeye katılmıyorsanız, tekrar kendiniz düzenleyebilirsiniz. hakre, bu soruyu okuyan birisinin , sadece bu kodu liyakat yerine almaktan ziyade, güvenli ve iyi test edildiği bilinen bir kütüphane kullanmasının mantıklı olacağı bir noktaya sahiptir . Ayrıca, bu soru sorulduğunda PHP 5.2'nin zaten desteklenmediğini belirtmek gerekir. Şimdi yazdığım gibi, iki yıldır desteklenmiyor ve yama yapılmayacak güvenlik sorunları var. Bu nedenle, bu yanıttaki kodu düşünmeden önce sadece PHP 5.2 kullanmak bir güvenlik sorunudur.
Spudley

439

PHP ve JS için verdiğiniz iki dizinin birbiriyle ilişkili olmadığını varsayacağım ve sadece dizilerin iki dilde nasıl göründüğüne örnekler. Açıkça, bu harf ve rakam dizilerini şehir adlarına dönüştüremeyeceksiniz.

PHP JavaScript koduna PHP diziler dönüştürmek için bir işlev sunar: json_encode(). (teknik olarak JSON biçimidir; JSON, JavaScript Nesne Gösterimi anlamına gelir)

Şöyle kullanın:

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

Daha fazla bilgi için yukarıda bağladığım kılavuz sayfasına da bakınız.

Bunun json_encode()yalnızca PHP 5.2 ve sonraki sürümlerde kullanılabildiğini unutmayın, bu nedenle daha eski bir sürüm kullanıyorsanız , varolan bir sürümü kullanmanız gerekir - PHP manuel sayfası, buna ihtiyaç duyan kişiler tarafından yazılmış işlevlere sahip yorumları da içerir. (ancak PHP 5.2'den daha eski bir şey kullanıyorsanız, ASAP'ı yükseltmeniz gerekir)


Javascript dizisinin sonunda bir noktalı virgül eksiksiniz ve PHP dizilerinin başlatılma şekli de bu değil (dizi deneyin ('abc' ....)) ... zaten oylama yapın çünkü muhtemelen OP'nin istediği şey
Daniel Sloof

@Spudley Merhaba, bunu denedim ve javascript php oluşturulan diziye erişmeye çalıştım console.log('stuff: ' + javascript_array[0]);, ama diyor javascript_arrayhenüz tanımlanmadı
Growler

PHP diziniz özel karakterler içeriyorsa, bu yanlış olur. Urlencode () işlevlerini kullanarak özel karakterlerden kaçabilirsiniz. Cevabımı gör: stackoverflow.com/questions/5618925/…
Ben Rogmans

1
Sadece json_encode bir dizi değil , bir JavaScript nesnesi tanımladığını belirtmek için.
Patrick Moore

1
@PatrickMoore - bu konuda bilgiçlik yapacaksanız json_encode, bir JS nesnesini veya bir JS dizisini veya hatta tek bir skaler değeri temsil edebilen bir JSON dizesi çıkarır . Cevabımdaki örnekler bir nesne değil, bir JavaScript dizisi çıktılar.
Spudley

39

Aptal ve basit:

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

6
Sadece meraktan : string alıntı, çift tırnak ve / veya virgül içerdiğinde ne olur?
Nis

1
Bunun için bir fonksiyon olduğu için, iyi bir neden olmadığı sürece doğaçlama bir çözüm yerine tercih edilmesi gerekir; burada hiçbir neden belirtilmemiş.
cjbarth

unicode karakterler için daha iyi çalışıyor (benim durumumda urdu)
Hammad Khan

33

O zamandan beri parseJSON aramak gerekmez çıkışında json_encodeisimli bir javascript değişmez. Sadece bir js değişkenine atayın.

<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_encodeişlevini kullanarak php dizilerini javascript'e dönüştürebilirsiniz

<?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
bu döngü korkunç
Eric

2
Bu gösteri
amaçlıydı

7
@Eric örnek doğrudan alınmış olduğu gibi sorudan. Kullanabilirdim console.log()ama sorunun kendisi çok temel (ve kullanıcı birçok tarayıcı kodu inceleme aracı ile deneyimim yok), bu yüzden kullanıcı doğrudan göreceği için alert () ile gitmeye karar verdim.Ama çok iyi biliyorsun sorunun ilgili kısmı değil, sadece mantığın çalışıp çalışmadığını doğrulamanın bir yoludur.
Dipesh KC

17

Javascript bir PHP dizisi ile çalışmak için en hızlı ve en kolay yolu bulmak:

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

çok basit ...!

bu yöntemi kullanın:

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

laravel blade {{}} 'de bu yöntemi kullanın:

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

ilişkili ve ilişkilendirilmemiş dizi için çalışıyor.


1
@MohammadKawsara'nın kullandığı yöntem, kullanıcı verilerine güveniyorsanız benim için en uygun yöntemdir.
Tomas Crofty

6

bu şekilde de yapabilirsin

<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

Bu şekilde kullandığım çok basit:

JAVASCRIPT :

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

PHP dizisini Javascript'e dönüştürme

Saygılarımızla!


4

Bir İçin boyutlu PHP4'te dizide Eğer Udo G tarafından gönderildi kodu aşağıdaki ek kullanabilirsiniz:

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

Bu benim fonksiyonum. JavaScript PHP altında olmalıdır, aksi takdirde SESSION kullanın.

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

Son satır .... metin olabilir (jsArray); ve "1,2,3,4,5,6" gösterilecek


3

Bir kullanmak sahte php dizi

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

diziniz bilinmiyorsa (zaten yapılmış)

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

... ya da "sahte" olanı almak için ilk diziyi () yerleştirebilirsiniz. Bunun eski bir yanıt olduğunu biliyorum, ama fikir aklımdan geçti.
Peter Lenjo

1
Tabii, ama benim yolum bu sayfadaki tüm önerilerin en hızlısı. Bazen hız önemli bir faktör olabilir.
Mik

2

Daha güvenli bir şekilde yapılabilir.

PHP diziniz özel karakterler içeriyorsa, PHP'de rawurlencode () kullanmanız ve ardından bunlardan kaçmak için JS'de decodeURIComponent () kullanmanız gerekir. Ve JSON yerel js ayrıştırın. Bunu dene:

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

console.log(data);

1

Ben de aynı sorunu vardı ve ben böyle yaptım.

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

Umut ediyorum bu yardım eder.


1

Basit tutun:

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

0

Doğrudan html sayfası kaynak koduna yazdırılacak çok boyutlu bir PHP dizisine ihtiyacınız varsa ve girintili bir insan tarafından okunabilir Javascript Nesne Gösterimi (aka JSON) tarzında, http://php.net/manual içinde bulduğum bu güzel işlevi kullanın /en/function.json-encode.php#102091 "bohwaz" lakaplı biri tarafından kodlanmış.

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

?>       

Lütfen boş verin !! Şimdi bunu kullanabiliriz: json_encode ($ array, JSON_PRETTY_PRINT); ve mutlu olmak!
Heitor

0

PHP dizisini JavaScript dizisine dönüştürmek için oldukça basit bir numara:

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

Aşağıdaki 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);

Mucizevi şekilde çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.