我有一个问题要问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 = explosion ('),', $ rows);$ pieces [0] = $ pieces[0]。")";
'markers' => array ($ pieces [0]) <- do not display
另一个例子不起作用Foreach ($ pieces as $ f) {$ marker [] = eval ("return $ f;");}' marker ' => array ($ marker)
另一方面,将代码直接粘贴到像这样的数组中,一切都正确显示。
'markers' => array (
gmap3_tools_create_marker (21.343556, 35.532361, 'Some text', '<a href="www.somesite.com"> some site </ a> <br> Some text'),
请帮。
我将使用call_user_func函数
call_user_func("gmap3_tools_create_marker", param1, param2 param3);
如果您确实反对正确解析值,则可以使用Eval。这是不被允许的,而且有潜在的危险,所以再次考虑寻找一个更好的解决方案。
eval($rows);
eval将执行给定字符串中的代码。
除了尝试将其解析为有意义的内容外,您还可以使用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.')",
);