2010-11-18 92 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]; 

更好的你儘量不保留默認值並重建邏輯。