从 PHP-JS 返回数组的计算的读取值
Read value of an evaluation returning an array from PHP-JS
我最近开始使用这个PHP-JS库。
它基本上是谷歌V8 javascript引擎上的php包装器。
使用它的主要原因是它可以运行孤立的javascript代码。
并返回结果。
对于int
和string
值来说,这都没有问题。这些按原样返回。
但是我发现自己创建了一个数组,我需要返回它。我得到:
PHP 致命错误:无法使用 JS''Object 类型的对象作为数组
我正在做这个简单的脚本:
<?php
$context = new JS'Context();
$script = "var arr = ". json_encode([2,3]).";x = arr.length";
var_dump($context->evaluate($script));
// int(2) - which is correct
但是,如果我想返回arr
:
<?php
$script = "var arr = ". json_encode([2,3])."; arr;";
var_dump($context->evaluate($script));
// class JS'Object#1 (0) {}
注意:evaluate($stuff)
返回脚本中的最后一个变量。
有什么好方法可以返回该值吗?
更新:经过一些挖掘,我找到了一种访问数据的方法。它的作用是将数组封装到stdClass
对象中:
$result = $context->evaluate($script);
echo $result->{0}; // outputs 2
// also works for ->{1}
但它仍然太丑陋了,无法在现实生活中使用。
想出一种方法来提取array
评估结果:
$script = "var arr = ". json_encode([2,3]).";x = JSON.stringify(arr);";
此时,x
是一个字符串:
var_dump($context->evaluate($script)); // string(5) "[2,3]"
现在我需要做的就是"反转"JSON.stringify()
:
var_dump(json_decode($context->evaluate($script),true));
// array(2) {
// [0] => int(2)
// [1] => int(3)
// }
更新
作为JS'Object
返回的数组是可迭代的。所以这是有效的:
$script = "var arr = ". json_encode([2,3]).";arr";
foreach($obj as $key=>$val){
print_r($key);echo " => ";print_r($val);echo "'n";
}
// output
// 0 => 2
// 1 => 3
当返回数组嵌套时,这不是那么好:
$script = "var arr = ". json_encode([2,3,[1,4]]).";arr";
$obj = $c->evaluate($script);
foreach($obj as $key=>$val){
print_r($key);echo " => ";print_r($val);echo "'n";
}
// output
// 0 => 2
// 1 => 3
// 2 => JS'Object Object() <- this needs looping too
对于第二个示例,需要递归方法来解析所有级别。
所以我坚持JSON.stringify
和json_decode($r, true)
;
相关文章:
- 从桌面读取python文件时高亮显示代码
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- TypeError:无法读取属性'推'未定义的JavaScript
- 根据元素和容器大小计算边距
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 使用D3.js计算带有字母间距的文本长度
- Tracker重新计算函数出现异常:无法读取属性'0'的未定义
- 从 PHP-JS 返回数组的计算的读取值
- JS 数组无法读取未定义的属性 663,并将计算作为索引
- 正在读取Ractive.js中的计算属性
- 读取一个设置文件并在node.js中计算
- 用JS从JSON文件中读取和计算数据
- 从网络计算机上启用智能卡的登录中读取windows用户名
- 如何读取JSON's的特定字段,计算和显示