2010-11-18 94 views
0

这里是我的PHP代码需要这个PHP函数帮助

$values = array(

     'php' => 'php hypertext processor', 

     'other' => array(
      'html' => 'hyper text markup language', 
      'css' => 'cascading style sheet', 
      'asp' => 'active server pages', 
     ) 

); 


function show($id='php', $id2='others') { 

    global $values; 

    if(isset($id2)) { 
     $title = $values[$id]; 
    } 
    elseif(empty($id2)) { 
     $title = $values[$id][$id2]; 
    } 

    return $title; 

} 

当我这样做

echo show('php'); 

显示 “PHP超文本处理器”

但是当我做

echo show('other','asp'); 

它不能正常工作,它守ld显示“活动服务器页面”

我在做什么错误?有人可以帮我吗?

+0

尝试在你的函数中添加异常处理,因为你的函数也是开放的(例如两次null),在这种情况下你会得到一个错误,因为标题不存在... – Kennethvr 2010-11-18 11:50:00

回答

3

你正在做错误的检​​查。

而且,empty调用有点多余。我会推荐这:

if(!empty($id2)) { 
     $title = $values[$id][$id2]; 

    } 
    else { 
     $title = $values[$id]; 
    } 
+0

如果我做这个,第二个完美地工作,但第一个“echo show('php');”没有,它只是显示“p” – 2010-11-18 11:52:45

+0

@Roccos啊是的,你需要设置默认'$ id2'为'null',而不是'others' – 2010-11-18 11:54:27

+0

它说缺少参数2,但在显示错误后显示正确的文本。 – 2010-11-18 11:59:15

1

我怀疑你总是进入你的if语句的第一部分,你在你的函数声明设置$ ID2的默认值,你的逻辑是靠不住略。尝试:

function show($id='php', $id2) { 

    global $values; 

    if(isset($id2)) { 
     $title = $values[$id][$id2]; 

    } 
    elseif(empty($id2)) { 
     $title = $values[$id]; 
    } 

    return $title; 

} 

这样,如果$ ID2设置,那么就应该从第二阵列,并默认为第一,如果空拉了出来。

+0

如果我这样做,它说失踪的论点二,但其余的作品完美。 – 2010-11-18 11:56:39

+0

好的,然后只需更改函数声明以显示($ id ='php',$ id2 = NULL)。 – simnom 2010-11-18 12:02:38

0

好吧,我相信你的基本逻辑是错的:你看,如果你是一个默认值设置这两个变量,URS的这个逻辑..

if(isset($id2)) { 
    $title = $values[$id]; 
} 
elseif(empty($id2)) { 
    $title = $values[$id][$id2]; 
} 

归结起来

$title = $values[$id]; 

更好的你尽量不保留默认值并重建逻辑。