2014-07-10 31 views
1

我有一個PHP專家的問題。好了,我在變量$行的數據,其中,我已經包括幾個功能,諸如源代碼:如何調用存儲在字符串變量中的函數? [PHP]

$ 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使用瀏覽的結果:生成使用視圖中的條目-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($件爲$ F){ $標記[] = EVAL(」 返回$ F;「); } '標記'=>數組($標記)

在另一方面直接將代碼粘貼到一個這樣的數組,一切都正確顯示。

'markers' => array (
gmap3_tools_create_marker (21.343556, 35.532361, 'Some text', '<a href="www.somesite.com"> some site </ a> <br> Some text'), 

請幫助。

+0

是否有任何東西阻止你分裂s tring(正則表達式)並將參數提供給'call_user_func_array'? – Rangad

回答

0

我會使用call_user_func函數。

call_user_func("gmap3_tools_create_marker", param1, param2 param3); 

如果確實設置了正確解析值,您可以使用Eval。這是皺眉和潛在的危險,所以再次考慮找到更好的解決方案。

eval($rows); 

eval將執行給定字符串中的代碼。

+0

Cheruvian,但我有這個函數存儲在VAR $行...我想要這個代碼inpunt其他,但不是字符串。 – user3762621

+0

我不明白你的評論,但如果你想從字面上運行它......使用eval – Cheruvian

+1

你仍然可以在'$ rows'中分割字符串並使用'call_user_func'。如果'eval()'是你的問題的答案,那麼你的問題很可能是錯誤的 –

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.')", 
); 
+0

另一方面直接將代碼粘貼到像這樣的數組中,所有內容都可以正確顯示。 '標記'=>陣列( gmap3_tools_create_marker(21.343556,35.532361, '一些文本', '一些網站
一些文本'), 請幫幫忙。 –
user3762621

+0

的代碼必須在這個數組中完全調用,我不能只給出結果(通過eval)直接在數組中的相同函數,也不能作爲變量。 – user3762621

相關問題