2011-08-14 53 views
1

我想要做的是默認$names陣列值,如果$_POST[]$names爲空,則其值爲並行$urls值。 (這是基於空的$_POST[]將返回空的假設,有人請糾正我,如果我錯了)。是否有更簡單的方法來更改單個數組值?

這裏是我的代碼:

$urls = array(1 => $_POST['url_1'], 2 => ['url_2'], 3 => $_POST['url_3'], 4 => $_POST['url_4'], 5 => $_POST['url_5']); 
$names = array(1 => $_POST['name_1'], 2 => ['name_2'], 3 => $_POST['name_3'], 4 => $_POST['name_4'], 5 => $_POST['name_5']); 

if(empty($names[1])) { $names[1] = $_POST['url_1']; } 
if(empty($names[2])) { $names[2] = $_POST['url_2']; } 
if(empty($names[3])) { $names[3] = $_POST['url_3']; } 
if(empty($names[4])) { $names[4] = $_POST['url_4']; } 
if(empty($names[5])) { $names[5] = $_POST['url_5']; } 

我想過使用一個foreach()循環,但我實在不明白怎麼會工作,因爲每個人數組值如如果爲空,則必須將$names[1]設置爲$urls[1]

任何意見,意見或其他信息將非常感謝:)!

回答

4
for ($i = 1; $i <= 5; $i++) { 
    $names[$i] = !empty($_POST['name_' . $i]) ? $_POST['name_' . $i] : $_POST['url_' . $i]; 
} 
+0

謝謝丹:)。空!($ _ POST ['name_'。$ i])? $ _POST ['name_'。 $ i]:$ _POST ['url_'。 $ i];'作爲'if()'在它自身中起作用,如果是這樣,你介意告訴我它叫什麼「它」(不知道如何定義它)? – Avicinnian

+1

它被稱爲[三運營商](http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary)。是的,它相當於'if(!empty($ _ POST ['name_'。$ i])$ names [$ i] = $ _POST ['name_'。$ i]; else $ names [$ i] = $ _POST [ 'url_'。$ i];' –

+0

因此,我應該去掉'$ names = array()',因爲它定義了空值和非空值的數組值?對不起我的問題:),只是想確保我理解100%。 – Avicinnian

2
for ($i = 1; $i <= 5; $i++) { 
    if (empty($names[$i])) { 
     $names[$i] = $_POST['url_' . $i]; 
    } 
} 

但請記住,你還需要檢查是否$_POST['url_' . $i']額外isset()檢查存在太多

+0

感謝您的反饋:)。在這種情況下,我應該做一些類似'for($ i = 1; $ i <= 5; $ i ++){ifset($ _ POST ['url_'。$ i])){continue; } else {break;} $ names [$ i] = $ _POST ['url_'。 $ i];如果(空($ names [$ i])){ $ names [$ i] = $ _POST ['url_'。 $ i]; } }'這也會設置'$ names = array()'值?此外,是否有理由將空白留在'['url_'中。 $ I]'? – Avicinnian

+0

@Pixelatron:'if(empty($ names [$ i])&& isset($ _ POST ['url_'。$ i])){'是更好的imho。空間放置在那裏,使代碼更具可讀性 – zerkms

2
foreach ($names as $k=>$v){ 
if(empty($v)){ 
$names[$k] =$urls[$k]; 
// or $names[$k] = $_POST['url_' . $k']; 
} 
} 
+0

感謝您的輸入:)。我看到你用我最初對'foreach()'所說的話進行了討論,這很好看,但我剛剛閱讀了一篇關於PHP基準資源使用情況的文章,似乎'foreach()'比'for() '所以我已經接受了使用for()的答案,因爲它似乎適合使用最有效的函數的習慣。謝謝雖然:)。 – Avicinnian

+0

我更喜歡foreach,對於$ k => $ v的威力,並不是所有的數組都會有序列數字範圍內的鍵。 – 2011-08-14 23:22:08

0
$urls = array(1 => $_POST['url_1'], $_POST['url_2'], $_POST['url_3'], $_POST['url_4'], $_POST['url_5']); 
$names = array(1 => $_POST['name_1'], $_POST['name_2'], $_POST['name_3'], $_POST['name_4'], $_POST['name_5']); 

for ($c = 1; $c <= 5; $c++) 
{ 
    if(empty($names[$c])) 
    { 
    $postKey = 'url_'.$c; 
    $names[$c] = $_POST[$postKey]; 
    } 
} 
相關問題