【问题标题】:Getting Single Value From Chunked Array从块数组中获取单个值
【发布时间】:2019-01-12 20:48:12
【问题描述】:

在一个分成 11 个值块的数组中,我需要知道一个特定的值是否为 TRUE。如果只有一个是 TRUE,这就是我所需要的,并且 foreach 可以在设置值后停止。我所能想到的就是让它在匹配时将 SESSION 值设置为 TRUE,但这并不会阻止循环继续,然后我遇到了 SESSION 给出错误结果的问题,除非它随后被取消设置,我之后做了该值已设置。似乎是一种间接的方式,所以有什么建议吗?

$FormValues = array_chunk($Fields, $NoValues); // Group together the field values            

// Check if form uses multiple selection fields and add appropriate form tags
    foreach ($FormValues as $multi) :
        if (isset($multi[9]) === TRUE) $_SESSION['useMulti'] = TRUE;
    endforeach;

    $enableMulti = (isset($_SESSION['useMulti'])) ? " enctype=\"multipart/form-data\"" : "";
    unset($_SESSION['useMulti']);

这是一个数组的例子,在这种情况下,没有一个应该返回 TRUE:

$Fields = array("First Name","Title",$Title,1,0,30,"","","","","",
                "Quote","Quote",$Quote,4,0,30,"","",$quoteSQL,FALSE,$siteDB,
                "Location","Location",$Location,1,0,30,"","","","","",
                "Date","EventDate",$EventDate,41,0,15,"",TRUE,"","","",
                "Time","Time",$Time,39,0,0,"","",$sqlTime,"","",
                );

【问题讨论】:

  • 你为什么使用这样的数组,而不是二维数组?
  • 为什么需要使用会话变量而不是普通变量?
  • 你不应该使用isset()
  • 这里的其他人在另一个问题中告诉我,这是一种很好的方法,并且有效。此外,数组在每个块中可能有不同数量的元素,这使它更加灵活,这就是为什么 $NoValues 在变量中的原因。数组本身是由另一种形式生成的。无论如何,更改它有点太晚了,因为它在我的许多网站中都在使用。
  • @Barmar 如果它不存在,有什么更好的方法可以做到这一点而不会出错?如果没有它,它有时会给出密钥不存在的错误,或者至少,我希望它可能

标签: php arrays session


【解决方案1】:

您可以简单地以 11 步长迭代原始数组,而不是使用 array_chunk

要让循环在找到所需内容后停止迭代,请使用break

您不需要会话变量,它们仅用于保存不同 PHP 脚本之间的值。你甚至不需要另一个变量,你可以在循环中设置 enableMulti 变量。

$enableMulti = "";
for ($i = 9; i < count($Fields); $i += $NoValues) {
    if ($Fields[$i] === true) {
        $enableMulti = " enctype=\"multipart/form-data\"";
        break;
    }
}

如果你真的想使用foreach,你确实需要使用array_chunk,你也可以使用array_column

$enableMulti = "";
$chunks = array_chunk($Fields, $NoValues);
foreach (array_column($chunks, 9) as $value) {
    if ($value === true) {
        $enableMulti = " enctype=\"multipart/form-data\"";
        break;
    }
}

你也可以完全摆脱循环:

if array_search(TRUE, array_column($chunks, 9)) {
    $enableMulti = " enctype=\"multipart/form-data\"";
} else {
    $enableMulti = "";
}

【讨论】:

  • 这可以用foreach代替for吗?不知道为什么,但我似乎更好地掌握了 foreach。无论如何,我会试一试,因为它看起来像我想要做的。如上所述,该会话仅用于诊断目的,我知道不需要。
  • 我已经添加了。
  • 它需要 $i 而不仅仅是 for 行中的 i 但将它添加到三个地方,它似乎工作得很好。在我写这篇文章的时候,我看到你把它改成了 foreach,所以谢谢!
  • 很高兴有选项,每个选项都很完美,再次感谢!我最终使用了非循环版本,因为它看起来更简单、更直接。
  • 您也可以考虑切换到更有用的数据结构,例如关联数组的数组。
猜你喜欢
  • 2014-04-21
  • 1970-01-01
  • 2016-09-27
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多