我对PHP专家提出了一个问题。好吧,我在变量$ rows中有数据,其中包含了几个函数的源代码,例如:
$ rows = "
gmap3_tools_create_marker (21.445985, 74.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')
gmap3_tools_create_marker (22.445985, 73.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')
gmap3_tools_create_marker (23.445985, 75.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.') "
这是在Drupal中使用Views的结果:生成一个使用views-view.tpl.php的条目我通过将结果放在代码必需gmap3-tools中的变量$ rows中来编辑位置。 此字符串是应用函数gmap3_tools_add_map标记所必需的对象标记数组。
gmap3_tools_add_map(array(
'mapId' => 'gmap-canvas',
'mapOptions' => array(
'zoom' => 15,
'center'=>'51.745985, 15.598451',
),
'markers' => array($rows),
'gmap3ToolsOptions' => array(
'defaultMarkersPosition' => GMAP3_TOOLS_DEFAULT_MARKERS_POSITION_CENTER,
),
'markerOptions' => array(
// Set custom shadow for all icons.
'shadow' => file_create_url(drupal_get_path('module', 'gmap3_tools') . '/images/druplicon-shadow.png'),
),
));
当然,上面的代码不起作用。但是如果你将直接粘贴结果(上面的那个)而不是字符串变量$ rows是一个函数gmap3_tools_add_map很好地应用了标记。
我知道问题在于它不执行gmap3_tools_create_marker函数它们作为字符串发送。
是否可以将字符串转换为函数?
我尝试了eval功能,但无济于事。我想到了call_user_func,但不幸的是我不知道怎么咬,请帮忙。
必须在此数组中完全调用代码。我不能在数组中直接给出结果(通过eval),也不能作为变量。
我这样做了: $ pieces = explode('),',$ rows); $ pieces [0] = $ pieces [0]。 ')“;
'markers' => array ($ pieces [0]) <- do not display
另一个例子不起作用 foreach($ pieces作为$ f){ $ markers [] = eval(“return $ f;”); } '标记'=&gt;数组($ markers)
另一方面,将代码直接粘贴到这样的数组中,一切都正确显示。
'markers' => array (
gmap3_tools_create_marker (21.343556, 35.532361, 'Some text', '<a href="www.somesite.com"> some site </ a> <br> Some text'),
请帮忙。
答案 0 :(得分:0)
我会使用call_user_func函数。
call_user_func("gmap3_tools_create_marker", param1, param2 param3);
如果您确实设置了正确解析值,则可以使用Eval。这是不受欢迎的,也可能是危险的,所以再考虑找一个更好的解决方案。
eval($rows);
eval将执行给定字符串中的代码。
答案 1 :(得分:0)
除了尝试将其解析为有意义的内容之外,您还可以使用eval
执行某些操作:
$funcs = array_filter(array_map('trim', explode("\n", $rows)));
foreach($funcs as $f) {
$markers[] = eval("return $f;");
}
然后使用:
'markers' => $markers,
如果您可以在开始时将其定义为数组,那么您可以省略第一部分:
$rows = array(
"gmap3_tools_create_marker (21.445985, 74.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')",
"gmap3_tools_create_marker (22.445985, 73.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')",
"gmap3_tools_create_marker (23.445985, 75.521431, 'marker with info window', '<a href=http://www.google.com> www.google.com </ a> some text some text photos.')",
);