2017-08-10 52 views
-1

我有一種情況,在我對它們執行操作之前,我想檢查大量字符串是否爲空。我不希望有執行上手動每一個字符串這張支票,所以我把它看起來像這樣的功能:將字符串中的變量作爲參數傳遞

function format_field($field_name, $format) { 
    $value = get_field($field_name); 
    if ($value != "") { 
    return $format; 
    } 
    return ""; 
} 

這個函數的調用看起來是這樣的:

format_field('website', "<p><strong>Website:</strong><a href=\"$value\">$value</a></p>"); 

我希望通過在傳遞給format_field()的字符串中寫入$value$value的值將在函數返回前在函數中擴展,但似乎並非如此。

這是否可能,我只是錯了?

我也知道關於sprintf(),但由於$value可以在字符串中多次引用,所以它不太理想。

+0

那你所要的輸出是什麼?如果'網站'中有一個字符串,你想要它說''網站:something「'或完全忽略整個輸出? – Andy

+0

函數內部的變量'$ value'與調用函數的代碼中的變量不同。閱讀更多關於[變量範圍](http://php.net/manual/en/language.variables.scope.php)。 – axiac

+0

嘗試僅將'$ value'作爲第二個參數傳遞給'format_field(arg1,arg2)',然後在返回之前在函數中處理它,當然可以將'get_field()'函數作爲@安迪在 –

回答

1

您的代碼存在的問題是,當通過"<p><strong>Website:</strong><a href=\"$value\">$value</a></p>"作爲函數參數時,$value變量不會在功能塊的稍後被替換。

因此,舉例來說,如果你有$value = 'https://a.b.c';$format值變爲"<p><strong>Website:</strong><a href=\"https://a.b.c\">https://a.b.c</a></p>"

你可以嘗試什麼,是替代一個佔位符,例如

"<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>"$format參數,然後使用類似的東西:

$format = "<p><strong>Website:</strong><a href=\"{value}\">{value}</a></p>";

$value = 'https://www.google.com';

echo preg_replace('#\{value\}#i', $value, $format);

實際上返回:<p><strong>Website:</strong><a href="https://www.google.com">https://www.google.com</a></p>

+0

謝謝你,我跟着去了。我希望我可以使用變量名稱,因爲這對任何人來說都是顯而易見的,但是隻要替換值就可以正常工作。 – Alex

相關問題