2013-05-01 58 views
2

我一直在尋找堆棧溢出和網絡的其他部分,我開始相信沒有未定義索引的通用解決方案。PHP中未定義的索引。通用解決方案需要

我有一個龐大的PHP應用程序,有幾種形式,在腳本的末尾,我調用所有窗體的輸入,並將它們放在一起顯示所有輸入的摘要。

echo $_POST['FirstName']; 
echo $_POST['MiddleName']; 
echo $_POST['LastName']; 

我知道如何檢查像

if (!isset($_POST['MiddleName'])) { $_POST['MiddleName'] = '' } 

每次出現時是否有辦法來自動捕獲所有未定義的指標,然後將它們設置爲0或空的?

回答

4

這是因爲循環槽全部索引的數組可以定義爲簡單:

$indexes_that_MUST_be_defined_but_can_be_empty = array(
     'FirstName', 
     * * * 
     'LastName' 
    ); 
    foreach($indexes_that_MUST_be_defined_but_can_be_empty as $index) { 
     if(! isset($_POST[$index])) { 
      $_POST[$index] = NULL; 
     } 
    } 

甚至可以預設不同的默認值是這樣的:

$indexes_that_MUST_be_defined_but_can_be_empty = array(
     'FirstName' => NULL, 
     * * * 
     'LastName' => NULL 
    ); 
    $_POST = array_merge($indexes_that_MUST_be_defined_but_can_be_empty, $_POST); 

如果你真的只是想抑制警告,你可以使用@像:

echo htmlspecialchars(@$_POST['any_index']); 

但我真實我不推薦這個。

編輯: 這裏有一個更可能的解決方案。使用指針A「神奇」的功能:

function null_if_not_defined(&$variable) { 
    return isset($variable) ? $variable : NULL; 
} 

// Usage: 
echo htmlspecialchars(null_if_not_defined($_POST['any_index'])); 
+1

+1,它被寫入應用程序的方式,它可能更像是$ indexes_that_MUST_be_defined_but_can_be_empty;) – Anigel 2013-05-01 10:52:38

+1

我喜歡你的建議;) – core1024 2013-05-01 11:01:25

+0

Core1024這是極好的,不要認爲這是可能的,雖然有辦法只是說任何未定義的索引都是空的,而不是構建數組(名字,姓氏等)。有點像數組(*) – 2013-05-01 12:51:01

0

如果你只想顯示與分配的值的指標,你可以做這樣的事情:

foreach ($_POST as $index => $value) { 
    echo "{$index}: {$value}<br/>"; 
} 
0

你也可以創建一個簡單的函數爲了這個目的:

$p = function($item) { 
    return isset($_POST[$item]) ? $_POST[$item] : null; 
}; 

現在你可以使用它作爲這樣的:

echo $p('MiddleName'); 
0
foreach($_POST as $key=>$value) { 
if($value == "") $_POST[$key] = 0; 
} 
2

你可以使用下面的函數來做到這一點。

function setNullValue($arr) 
{ 
    $newarr = array(); 
    foreach($arr as $key => $ar) 
    { 
     if($ar == "") 
     { 
      $newarr[$key] = 0; 
     } 
     else 
     { 
      $newarr[$key] = $ar; 
     } 
    } 
    return $newarr; 
} 
print_r(setNullValue($_POST));