Получение единого значения из массива Chunked - PullRequest
0 голосов
/ 12 января 2019

В массиве, который разбит на блоки из 11 значений, мне нужно знать, имеет ли конкретное значение ИСТИНА. Если только один ИСТИНА, это все, что мне нужно, и 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,"","",
                );

1 Ответ

0 голосов
/ 13 января 2019

Вы можете просто перебирать исходный массив с шагом 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 = "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...