Php 从分块数组中获取单个值

Php 从分块数组中获取单个值,php,arrays,session,Php,Arrays,Session,在被分块成11个值的块的数组中,我需要知道某个特定值是否为真值。如果只有一个是真的,这就是我所需要的,foreach可以在设置值后停止。我所能想到的就是让它在匹配时将会话值设置为TRUE,但这不会阻止循环继续,然后我遇到了会话给出错误结果的问题,除非它随后被取消设置,这是我在设置值后所做的。这似乎是一种间接的方式,有什么建议吗 $FormValues = array_chunk($Fields, $NoValues); // Group together the field values

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

$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,"","",
                );

您可以简单地以11的步幅在原始数组上迭代,而不是使用
array\u chunk

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

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

$enableMulti = "";
for ($i = 9; i < count($Fields); $i += $NoValues) {
    if ($Fields[$i] === true) {
        $enableMulti = " enctype=\"multipart/form-data\"";
        break;
    }
}
您还可以完全消除循环:

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

为什么要使用这样的数组而不是二维数组?为什么需要使用会话变量而不是普通变量?你不应该使用
isset()
。这里有人在另一个问题中告诉我,这是一种很好的方法,而且很有效。此外,数组在每个块中可能有不同数量的元素,这使得它更灵活,这就是$NoValues在变量中的原因。数组本身是由另一种形式生成的。不管怎样,现在更改它有点太晚了,因为我的许多网站都在使用它。@Barmar如果它不存在,有什么更好的方法可以不出错呢?如果没有它,它有时会出现密钥不存在的错误,或者至少,我认为可能会出现这样的错误。这可以用foreach而不是for来完成吗?不知道为什么,但我似乎理解得更好。不管怎样,我会尝试一下,因为它看起来像是我想做的。如上所述,该会话仅用于诊断目的,我知道不需要它。我已经添加了它。它需要$I,而不仅仅是for行中的I,但是添加到这三个位置后,它似乎工作得非常完美。当我写这篇文章的时候,我看到你把它改成了foreach,所以谢谢你!很高兴有选择和每一个完美的作品,所以再次感谢!我最终使用了非循环版本,因为它看起来更简单和更直接。您也可以考虑切换到一个更有用的数据结构,例如一个关联数组的数组。
if array_search(TRUE, array_column($chunks, 9)) {
    $enableMulti = " enctype=\"multipart/form-data\"";
} else {
    $enableMulti = "";
}