【问题标题】:if...else inside a foreach loop phpif...else 在 foreach 循环 php 中
【发布时间】:2022-01-25 06:38:32
【问题描述】:

我有以下代码可以让一些提交按钮工作。

if (isset($_POST["this"])) {
    if ($_SESSION["sentence"] != "") { $_SESSION["sentence"] .= " " ; }
    $_SESSION["sentence"] .= 'This' ;
}

elseif (isset($_POST["my"])) {
    if ($_SESSION["sentence"] != "") { $_SESSION["sentence"] .= " " ; }
    $_SESSION["sentence"] .= 'my' ;
}

elseif (isset($_POST["sentence"])) {
    if ($_SESSION["sentence"] != "") { $_SESSION["sentence"] .= " " ; }
    $_SESSION["sentence"] .= 'sentence' ;
}

else {
    $_SESSION["sentence"] = null;
}

我试图让那些 if...else 语句在 foreach 中工作,但结果不起作用。

$sentence='This my sentence';
$words=explode(' ', $sentence);

foreach ($words as $key => $word) {
    
    if (isset($_POST[$word])) {
        if ($_SESSION["sentence"] != "") { $_SESSION["sentence"] .= " " ; }
        $_SESSION["sentence"] .= $word ;
    }
    
}


else {
    $_SESSION["sentence"] = null;
}

【问题讨论】:

  • php 中没有foreach/else 这样的东西。
  • 为什么需要else 子句?如果没有进入循环,则不会更新$_SESSION["sentence"],它应该隐式保持null
  • xy 问题,确实你应该修复它不使用数组键作为单词,只需在添加一个时在表单输入上使用name="words[]",然后你可以简单地爆破@987654328 @
  • @LawrenceCherone 我倾向于不同意,你最终可能会得到'sentence this my' 或任何打乱的句子,一个简单的内爆
  • @Cid 取决于 dom 的顺序,为什么要洗牌?

标签: php if-statement foreach


【解决方案1】:

看起来您正试图通过检查 $_POST 值来创建 $_SESSION['sentence'] = 'This my sentence'

您的初始变量检查是导致问题的原因。您的代码和问题中没有足够的信息来确认您想要做什么。

例如,您是否只希望 $_SESSION['sentence']This my sentencenull 的值?可以是This my 还是sentence This

猜测你想要This my sentence,我会更像这样处理这个问题:

$_SESSION['sentence'] = null;

if ((isset($_POST["this"])) && (isset($_POST["my"])) && (isset($_POST["sentence"]))){
  $_SESSION['sentence'] = 'This my sentence';
}

上述代码的问题是isset($_POST['this'] 可以存在并且可以为空或为空。因此,您可能需要扩展为:

$_SESSION['sentence'] = null;

if ((isset($_POST["this"]) && $_POST["this"]) && 
    (isset($_POST["my"]) && $_POST["my"]) && 
    (isset($_POST["sentence"]) && $_POST["sentence"])){
  $_SESSION['sentence'] = 'This my sentence';
}

现在这读起来有点难看,但可以。如果你想让它更容易阅读,你可以这样做:

$_SESSION['sentence'] = null;

if ((isset($_POST["this"])) && (isset($_POST["my"])) && (isset($_POST["sentence"]))){
  if (($_POST["this"]) && ($_POST["my"]) && ($_POST["sentence"])){
    $_SESSION['sentence'] = 'This my sentence';
  }
}

如果您不关心$_SESSION['sentence'] 的最终顺序,或者即使找到所有值,您也可以这样做:

$_SESSION['sentence'] = '';
$toCheck = array('This','my','sentence');

foreach($toCheck as $k => $v){
  if ((isset($_POST[$v]) && $_POST[$v]) {
    $_SESSION['sentence'] .= $_POST[$v].' ';
  }
}

$_SESSION['sentence'] = ($_SESSION['sentence']) ? trim($_SESSION['sentence']) : null;

使用上述选项,您最终可以在$_SESSION['sentence'] 中获得任何组合或订单。例如sentence my 是可能的。

最后一个选项(这说明了为什么在你的问题中明确是很重要的),你也可以这样做:

$_SESSION['sentence'] = '';
$found = 0;
$toCheck = array('This','my','sentence');

foreach($toCheck as $k => $v){
  if ((isset($_POST[$v]) && $_POST[$v]) {
    $found++;
  }
}

$_SESSION['sentence'] = ($found == 3) ? 'This my sentence' : null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2015-07-20
    • 2014-02-11
    • 2012-09-02
    相关资源
    最近更新 更多