我有一个像这样的PHP数组。
Array
(
[0] => hal([[br,1],[cl,4]])
[1] => alk([[nc(1),1,2],[nc(1),3]])
)
如何传递给JavaScript,如下所示。
var hal=[["br",1],[cl,4]];
var alk=[[nc(1),1,2],[nc(1),3]];
我写了一些代码
<script>
var data = <?=json_encode($input);?>; //$input is name of the php array
var hal=[data[0].substring(5,data[0].lastIndexOf(']'))];
var alk=[data[1].substring(5,data[1].lastIndexOf(']'))];
document.write(hal[0]);
</script>
输出是[br,1],[cl,1],我的预期输出如下所示。任何想法?谢谢。
document.write(hal[0]); => ["br",1]
document.write(hal[0][0]); => ["br"]
答案 0 :(得分:1)
如果你想要多个变量,你需要遍历数组;你可以抓住名字using a regular expression。如果你试图将它变成有效的数据,你可以解析,就像一个JSON字符串,你将不得不做大量的工作;可能无论你从哪里得到这个字符串都是一个更好的地方。让他们为您传递一个有效的JSON字符串。
<script>
<?php foreach($input as $v) {
preg_match("/(\w+)\((.*)\)/", $v, $matches);
$var = $matches[1];
$val = str_replace("'", "\\'", $matches[2]);
echo "var $var = '$val';\n";
} ?>
</script>
答案 1 :(得分:0)
Jeffrey Way提供了一个名为Transform PHP Vars to JavaScript的软件包,您可以使用该软件包轻松地将您的变量传输到您的Javascript。
首先,创建Laracasts\Utilities\JavaScript\ViewBinder
接口的实现。该课程负责将给定的JavaScript插入您的视图/页面。
<?php
class MyAppViewBinder implements Laracasts\Utilities\JavaScript\ViewBinder {
// $js will contain your JS-formatted variable initializations
public function bind($js)
{
// Do what you need to do to add this JavaScript to
// the appropriate place in your app.
}
}
接下来,把它们放在一起:
$binder = new MyAppViewBinder;
$javascript = new PHPToJavaScriptTransformer($binder, 'window'); // change window to your desired namespace
$javascript->put(['foo' => 'bar']);
现在,您可以通过JavaScript访问window.foo
。
答案 2 :(得分:0)
我找到了我的问题的答案。我将php中的值作为字符串传递。然后该字符串将其转换为对象。
<?php
$input="hal([[br,1],[cl,4]])";
preg_match('@^([^[]+)?([^)]+)@i',$input, $hal); //get string as '[[br,1],[cl,4]]'
?>
<script>
var hal1 = <?=json_encode($hal[2]);?>; //'[[br,1,2],[cl,1,2]]' pass to javaScript
function toJSObject(str){
str = str.replace(/([a-zA-Z]+)/g, '"$1"');
return (JSON.parse(str))
}
var hal = toJSObject(hal1); // pass to JS object [['br',1,2],['cl',1,2]]
document.write(hal);
</script>
而且这也是正确的。
document.write(hal[0]); => ["br",1]
document.write(hal[0][0]); => ["br"]