2014-10-30 4 views
0

У меня есть этот код, написанный на php для возврата foo, если bar задан, и bar, если задано 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

ответ

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 ключевое слово в вашей подписи функции. Таким образом вы передаете переменную в область действия, чтобы она могла ее видеть.

Смежные вопросы