2012-11-06 20 views
2

存在時,使用一個變量的值,我希望能夠檢查到的存在,但往往不到,6個連續的命名變量使用for循環這樣的:如何檢查的另一個

for ($i = 0; $i <= 5; $i++) { 
    $vartocheck = "$var_".$i; 
    if ($vartocheck) { 
     echo $vartocheck." exists!"; 
    } 
} 

現在我知道上述不起作用,但我無法弄清楚如何使用$ i的值引用並檢查$ var_0是否存在到$ var_5。

我已經嘗試過isset和call_user_func來構造並返回變量名稱,但之後我至今沒有成功。

我想避免評估聲明。

+2

聽起來真是你變量應該在數組中而不是僅僅是獨立命名的變量。 –

+0

你總是可以使用eval(這絕不是邪惡的):-) ... – adeneo

+0

嗯,可能。目前我正在使用這個系統,我知道這個變量已經被聲明瞭,所以我正在嘗試使用這個變量。 – MarbleCake

回答

1

最直接的方法看起來是:

for ($i = 0; $i <= 5; $i++) { 
    if (isset(${"var_{$i}"})) { 
    echo ${"var_{$i}"}." exists!"; 
    } 
} 

需要注意的是:

$hello = 'world'; 
$world = 'foo'; 

$$hello === ${$hello} === ${"world"} === $world === 'foo'. 

所以在你的原代碼,你可以使用:

for ($i = 0; $i <= 5; $i++) { 
    $vartocheck = "var_".$i; 
    if (isset($$vartocheck)) { 
     echo '$'.$vartocheck." exists!"; 
    } 
} 
+0

直到我可以對基於陣列的解決方案進行排序,這正是我所需要的。非常感謝。 – MarbleCake

2

不這樣做(因爲這是絕對錯誤的動態檢查的名字變量的存在),但它可以使用例如來完成:

isset($$vartocheck); 

迴應您的意見,這個工程:

<?php 
    $var = 'abc'; 
    var_dump(isset($$var)); // bool(false) 
    $abc = 1; 
    var_dump(isset($$var)); // bool(true) 

檢查您的$ vartocheck(空格等)中是否沒有特殊字符,或者變量是否是字符串。

+0

Krzysztof - 不確定你的意思是「不要這樣做,因爲它只是錯誤的」。另外,我曾嘗試在if語句中使用isset,但無濟於事。 – MarbleCake

+0

請注意雙$符號。它讀取'$ vartocheck'的值並將該值作爲變量的名稱。這樣做是錯誤的,因爲它可能導致與現有變量的衝突。假設你在範圍內有另一個你不想檢查的變量,它也會爲該變量返回true。如果數據來自用戶,則可能是安全問題。 –

+0

將所有這些變量放在'array'中,並使用'array_key_exists'或'isset'來檢查它們。你也可以更容易地迭代它們。 –

1

您可以嘗試

$var_4 = "Test"; 
for($i = 0; $i <= 5; $i ++) { 
    $vartocheck = "var_" . $i; 
    if (isset(${$vartocheck})) { 
     echo $vartocheck, " exists!"; 
    } 
} 

輸出

var_4 exists! 
+0

謝謝巴巴。從Ninsuo下面的解決方案更加緊湊,所以我現在就去解決這個問題。 – MarbleCake

1

您可以使用$$var_name

代碼的修改版本:

for ($i = 0; $i <= 5; $i++) { 
    $vartocheck = "var_".$i; 
    if (isset($$vartocheck)) { 
     echo $vartocheck." exists!"; 
    } 
} 

PS:+1使用數組。

+0

嘿,那裏,我嘗試過,但沒有成功。至於數組,我將這一切都加入到我的「待辦事項」列表中,因爲我需要爲概念驗證工作。 – MarbleCake

0

不要這樣做。這是不良的做法動態檢查的名字變量的存在,但如果你一定可以通過以下完成:

isset($$vartocheck); 

然而,正如@保羅 - bergantino在評論中指出,你好得多爲這樣的事情使用數組。

+0

嘿,那裏,我嘗試過,但沒有成功。 – MarbleCake

相關問題