2014-10-30 215 views
0

我有這段代碼,寫在PHP中返回foo如果酒吧給出和酒吧,如果foo給出。我嘗試過了,看起來沒有添加一個catch,所以如果輸入了除foo或bar外的任何內容,那麼「未知將會是輸出」。array_key_exists總是返回false

<?php 
echo("<html><body bgcolor='#ffffff'><h1>Welcome</h1>"); 
$input = $_GET["foobar"]; 

$array = array(
    "foo" => "bar", 
    "bar" => "foo", 
); 

function getValue($value) { 
    if(array_key_exists($value, $array)) { 
     return $array[$value]; 
    } else { 
     return "Unknown"; 
    } 
} 

echo ("Input: ". $input .", Output: ". getValue($input)); 

echo("<br><br>"); 

print_r($array); 

echo("</body></html>"); ?> 

但是,看來該array_key_exists總是返回假的,當我去我的頁面或者page.php文件foobar的= FOO或page.php文件foobar的=欄我得到這樣的:??

Welcome 

Input: bar, Output: Unknown 

Array ([foo] => bar [bar] => foo) 

或其相反,輸入切換到foo但輸出保持「未知」。

+2

你的函數對'$ array'一無所知。所以你可能**也**沒有激活錯誤報告/顯示完全(這會告訴你有關錯誤)。 – LSerni 2014-10-30 20:59:38

回答

2

基本PHP:在一個「父」的範圍定義的變量是可見的「孩子」的範圍:

$array = array(...); // global scope, top-level of the script 

function getValue($value) { 
    if(array_key_exists($value, $array)) { 
           ^^^^^^^---undefined local variable, function scope 

你應該至少有

global $array; 

在開始你的getValue函數。

1

我50cts完成馬克的答案,提出到global聲明的替代:

<?php 
echo("<html><body bgcolor='#ffffff'><h1>Welcome</h1>"); 
$input = $_GET["foobar"]; 

$array = array(
    "foo" => "bar", 
    "bar" => "foo", 
); 

function getValue($value) use (&$array) { 
    if(array_key_exists($value, $array)) { 
     return $array[$value]; 
    } else { 
     return "Unknown"; 
    } 
} 

echo ("Input: ". $input .", Output: ". getValue($input)); 

echo("<br><br>"); 

print_r($array); 

echo("</body></html>"); 
?> 

通知的use關鍵字在你的函數簽名。通過這種方式,您可以將一個變量傳遞給函數的作用域,以便它可以看到它。