2011-08-14 47 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]; 
    } 
} 
相关问题