2014-04-25 82 views
3

我有一個有趣的情況。我正在使用包含在多個頁面中的表單(爲了簡化並減少重複),並且在某些區域中的此表單中填充了來自數據庫的值。但是,並非所有這些值都將始終存在。例如,我可以做一些效果:PHP帶字符串並檢查該字符串是否作爲變量存在

<?php echo set_value('first_name', $first_name); ?> 

,並在那裏存在的價值,這將正常工作,但$用戶並不總是設置,因爲它們可能在首次被輸入他們的名字。是的,你可以在if語句中使用isset($first_name) && $first_name(簡寫或常規)

我想寫一個幫助函數來檢查變量是否被設置,以及它是否爲空。理想情況下,我希望執行類似varIsset('first_name')的操作,其中first_name是實際變量名稱$ first_name,並且該函數將接受該字符串,將其轉換爲預期變量$ first_name並檢查它是否設置爲非空值。如果它通過要求,然後返回該變量值(在這種情況下'測試')。如果它沒有通過要求,那麼它沒有設置或爲空,那麼函數將返回'{空白}'。

我使用的CodeIgniter如果有幫助,將在不久的將來切換到Laravel。任何幫助表示讚賞。這是我到目前爲止所做的,但無濟於事。

function varIsset($var = '') 
{ 
    foreach (get_defined_vars() as $val) { 
     if ($val == $var) { 
      if (isset($val) && $val) { 
       echo $val; 
      } 
      break; 
     } 
    } 
    die; 
} 

下面是一個例子用法:

<?php 
if (varIsset('user_id') == 100) { 
    // do something 
} 
?> 

回答

2

我會用數組和檢查數組鍵本人(或初始化我的所有變量...),但對於你的功能,你可以使用類似:

function varIsset($var) 
{ 
    global $$var; 
    return isset($$var) && !empty($$var); 
} 

查閱variable variables的使用說明書。你需要使用global $$var;來解決範圍問題,所以這是一個討厭的解決方案。看到一個工作example here

編輯:如果需要返回的值,你可以這樣做:

function valueVar($var) 
{ 
    global $$var; 
    return (isset($$var) && !empty($$var)) ? $$var : NULL; 
} 

不過說實話,使用變量一樣,當他們可能會或可能不會存在似乎有點我錯了。

+0

我已經嘗試過的變量變量和沒有運氣。該函數將存在於幫助程序文件中。 –

+0

@K_G我忘記了'global'聲明,請參閱我添加的工作示例。 – jeroen

+0

感謝您的工作示例。儘管如此,我仍然得到一個FALSE,並且我知道這個變量絕對是在控制器中設置的 - >我正在查看的視圖。 –

0

這將是一個更好的辦法渲染髮生之前介紹中,你要搜索一個方面,例如:

function varIsset($name, array $context) 
{ 
    return !empty($context[$name]); 
} 

上下文,然後用你的數據庫結果填充。順便說一下,empty()有一個小的警告字符串值"0";在這些情況下,它可能是一個更好的方法來使用這個邏輯:

return isset($context[$name]) && strlen($name); 
0

嘗試:

<?php 
function varIsset($string){ 
    global $$string; 
    return empty($$string) ? 0 : 1; 
} 
$what = 'good'; 
echo 'what:'.varIsset('what').'; now:'.varIsset('now'); 
?> 
相關問題