2012-09-21 50 views
0

我有數百個變量這種結構:複製串用正則表達式

$bsdatA = $_POST['bsdat_a']; 
$bsdatB = $_POST['bsdat_b']; 

...

的問題是,我必須isset()函數的功能添加到每個的,就像這樣:

$bsdatA = isset($_POST['bsdat_a']) ? $_POST['bsdat_a'] : ''; 
$bsdatB = isset($_POST['bsdat_b']) ? $_POST['bsdat_b'] : ''; 

...

這是一個手工複製和粘貼在每一行......可它通過定期前完成壓力?如果是的話,有人可以寫下準確的公式嗎?這將節省我很多時間。

非常感謝。

+0

如果有幾百種可能的結構,可能的結構是什麼? –

+0

檢查您的ide重構 – Sednus

+0

a,b,c,a1,a2,a11,b12等。 – VORiAND

回答

1

我假設你正在嘗試使用支持正則表達式的IDE改變的代碼替換:

下面是正則表達式月蝕:

查找:

\$(\w+) = \$_POST\['(\w+)'\]

替換:

$1 = isset(\$_POST['$2']) ? \$_POST['$2'] : '';

+0

謝謝。是的,我忘了告訴,這代替需要在代碼:) – VORiAND

0
$result = preg_replace('/\$(\w+)\s+=\s+\$_POST\[\'([^\']+)\'\];/', 
      '$\1 = isset($_POST[\'\2\']) ? $_POST[\'\1\'] : \'\';', $subject); 
2

哦,不是一個正則表達式,因爲我看不出這會有所幫助,但這裏是一個可以通過很多簡化編碼功能:

<?php 
function postvar($index){ 
    return isset($_POST[$index]) ? $_POST[$index] : ''; 
} 

$bsdatA = postvar('bsdat_a'); 

我會直接用postvar('bsdat_a'),而不是把結果放在一個變量中,順便說一句,因爲你冒險結束了很多你只會使用一次的變量。如果你絕對相信你想有$bsdatA$bsdatB局部變量,那麼我會建議使用一個循環:

<?php 
foreach(range('A', 'Z') as $current) { 
    ${'bsdat'.$current} = postvar('bsdat_'.strtolower($current)); 
} 

不過,這只是嚇人:)

編輯:啊,你正在談論一個現有的腳本,你想改變它以包含大量的isset()調用?對不起,我沒有接受。

您可以將$ _POST替換爲實現ArrayAccess的對象。這樣一來,你也可以登錄被調用,而不是使用POST變量:

<?php 
class PostVars implements ArrayAccess { 
    protected $vars; 
    public $log; 

    public function __construct($vars) { 
     $this->vars = $vars; 
    } 

    public function offsetGet($offset) { 
     if(!isset($this->vars[$offset])) { 
      $this->log[] = $offset; 
     } 
     return $this->vars[$offset]; 

    } 

    public function offsetExists($offset) { 
     return isset($this->vars[$offset]); 
    } 

    public function offsetSet($offset, $value) { 
     // readonly. 
    } 

    public function offsetUnset($offset) { 
     // readonly. 
    } 
} 

$_POST = array('bsdat_a' => 'bar', 'bsdat_b' => null); 

$_POST = new PostVars($_POST); 

echo $_POST['bsdat_a']; 
echo $_POST['bsdat_b'];