Javascript operatörü gibi bir liste var mı?

6 Cevap php

Ben şimdi böyle bir görevi uygulamak ediyorum: javascript PHP değişkenleri dönüştürmek gerekiyor

$arr['name1'] = 'value1';
$arr['name2'] = 'value2';

işleme sonrası, olmalıdır, böylece:

<script type="text/javascript">
var name1 = 'value1';
var name2 = 'value2';
...

Bunu bu şekilde yapmak için umut:

<script>
list(<?php echo join(',',array_keys($arr)?>) = <?php echo json_encode(array_values($arr));?>

6 Cevap

Muhtemelen bu iş olmaz soru yanlış, ama?

echo "<script>";
foreach ($arr as $k => $v) 
{
    echo "var $k = $v;";
}
echo "</script>";

Check php.js , they have ported a lot of features of PHP to JS, list() is listed as experimental.

Hayır, üzgünüm.

Sen yerine sadece komut dosyası nesne yazdırmak için json_encode kullanmayı düşünebilirsiniz.

<?php
    $a = array('foo' => 'bar');
    json_encode($a); // returns {"foo":"bar"} which is valid Javascript syntax
?>

<script>var obj = <?php echo json_encode($a); ?></script>

Sen json kullanabilirsiniz.

var arr = { "name1" : "value1", "name2": "value2"}

Sonra bir değer almak için sadece bir alanda gibi erişmek

var firstVal = arr.name1

Eğer PHP JS, bu dönüşüm görevlerde size yardımcı olacak bir göz atmak isteyebilirsiniz. Teşekkürler

Şu anda tartışmalı 'eval ()' fonksiyonu yardımıyla sadece mümkün ...

function list(v,a){
  v=v.split(',');
  for(var s='',i=0;i<v.length;i++)
    s+=v[i]+'='+i+'<'+a+'.length?'+a+'['+i+']:null;';
  return s;
}

Kullanımı:

eval(list(var_names_as_comma_separated_str, str_name_of_array));

Örnek:

A=['one',1,'z1'];
eval(list('x,y,z','A'));
console.log('+-> First: ',x,y,z);  //output: one 1 z1
(function(){
  var z,B=['two',2,'local'];  //note that z is local variable
  console.log('Local.Before: ',x,y,z);  //output: one 1 undefined
  eval(list('x,y,z','B'));
  console.log('Local.After: ',x,y,z);  //output: two 2 local
})()
console.log('+-> Back: ',x,y,z);  //output: two 2 z1 (global z is unchanged)

Not: window ['var_name'] yerel değişken (işlev içinde değişken) erişmek için kullanılamaz, bu yüzden eval başka çarem yok (...)