【问题标题】:Is there a simpler way to change a single array value?有没有更简单的方法来更改单个数组值?
【发布时间】:2011-10-26 23:32:33
【问题描述】:

如果$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]

非常感谢任何建议、cmets 或其他信息 :)!

【问题讨论】:

    标签: php arrays post if-statement foreach


    【解决方案1】:
    for ($i = 1; $i <= 5; $i++) {
        if (empty($names[$i])) {
            $names[$i] = $_POST['url_' . $i];
        }
    }
    

    但请记住,您还需要通过额外的isset() 检查来检查$_POST['url_' . $i'] 是否存在

    【讨论】:

    • 感谢您的反馈 :)。在这种情况下,我应该做类似for ($i = 1; $i &lt;= 5; $i++) { if(isset($_POST['url_' . $i])) { continue; } else { break;} $names[$i] = $_POST['url_' . $i]; if (empty($names[$i])) { $names[$i] = $_POST['url_' . $i]; } } 的事情,它也会设置$names = array() 值吗?另外,有什么理由应该在['url_' . $i] 中留下空格?
    • @Pixelatron:if (empty($names[$i]) &amp;&amp; isset($_POST['url_' . $i])) { 更好恕我直言。此处放置空格以使代码更具可读性
    【解决方案2】:
    foreach ($names as $k=>$v){
    if(empty($v)){
     $names[$k] =$urls[$k];
    // or  $names[$k] = $_POST['url_' . $k'];
    }
    }
    

    【讨论】:

    • 感谢您的意见 :)。我看到你同意我最初所说的关于 foreach() 的内容,这很高兴看到,但我刚刚阅读了一篇关于 PHP 基准资源使用的文章,似乎 foreach()for() 慢得多,所以我接受了使用for() 的答案似乎适合养成使用最有效功能的习惯。不过谢谢:)。
    • 我更喜欢 foreach,因为 $k=>$v 的强大功能,并非所有数组都会在连续数字范围内具有键。
    【解决方案3】:
    for ($i = 1; $i <= 5; $i++) {
        $names[$i] = !empty($_POST['name_' . $i]) ? $_POST['name_' . $i] : $_POST['url_' . $i];
    }
    

    【讨论】:

    • 谢谢丹 :)。 !empty($_POST['name_' . $i]) ? $_POST['name_' . $i] : $_POST['url_' . $i]; 是否充当 if() 本身,如果是,你介意告诉我“它是”(不知道如何称呼它)叫什么吗?
    • 它被称为ternary operator。是的,它相当于if (!empty($_POST['name_' . $i]) $names[$i] = $_POST['name_' . $i]; else $names[$i] = $_POST['url_' . $i];
    • 因此,我应该去掉$names = array() 对,因为它定义了空和非空情况的数组值?对不起我的问题的无知:),只是想确保我理解 100%。
    • 这段代码不依赖于$_POST以外的任何数组已经存在,正确。
    【解决方案4】:
    $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]; 
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多