Записать только первые X-выходы в цикле foreach в файл (внутри ассоциативного массива)? - PullRequest
0 голосов
/ 13 января 2019

У меня есть ассоциативный массив, который извлекает данные в шаблон таблицы обзора.

Это «вторичная таблица», расположенная внизу страницы, где поместятся только элементы X. Я пытаюсь записать в файл только первые элементы X.

Флажки генерируют $ selection с выбором [].

$result = array();
foreach( array_rand($selections, count($selections)) as $k ) {
include dirname(__FILE__) . "/bottomfeature.php";
}

Обратите внимание, что этот цикл использует другие файлы, а не только bottomfeature.php.

Внутри bottomfeature.php я собираю название функции, например (и других элементов, но только для примера:

$featuretitle =  $result[] = $selections[$k];

$featurearray = array(
"<tr>",
"<td>$featuretitle</td>",
"</tr>"
);
$feature = implode("\n",$featurearray);

$fp = fopen("bottomfeature.txt", "a");
fwrite($fp, $feature);
fclose($fp);

В нижней части этой страницы достаточно только 4 выходов. Как я мог остановить казнь на 4-м?

Кроме того, как насчет записи только первого вывода? Я пытался использовать "w" в fopen.

$fp = fopen("bottomfeature.txt", "w");

Но он записывает только последний элемент цикла вместо первого.

Спасибо за помощь.

Обновлено с помощью флажков html

<?php

if(isset($_REQUEST['submit'])) {

$result = array();
foreach( array_rand($selections, count($selections)) as $k ) {
include dirname(__FILE__) . "/bottomfeature.php";
}

}

?>

<form action="" method="post">
<input type="checkbox" name="selection[]" value="Brand1">Brand1</label>
<input type="checkbox" name="selection[]" value="Brand2">Brand2</label>
<input type="checkbox" name="selection[]" value="Brand3">Brand3</label>
<input type="checkbox" name="selection[]" value="Brand4">Brand4</label>
<input type="submit" name="submit" value="Save Setup" />
</form>

1 Ответ

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

Вы можете получить доступ к счетчику, который начинается с 0 в цикле foreach, просто используя индексы - это избавляет вас от необходимости вручную увеличивать счетчик.

Включение может ссылаться на счетчик и ограничение в своем блоке условий, чтобы определить, следует ли обновить файл. Другие процессы могут выполняться на всех отправленных значениях.

Демо: https://3v4l.org/I6bnC

$limit = 4;
$selections = ['a', 'b', 'c', 'd', 'e'];
shuffle($selections);
foreach ($selections as $i => $selection) {
    echo "before include $selection\n";
    // start include code...
        if ($i < $limit) {
            echo "**display limited $selection**\n";
        }
    // end include code
    echo "after include $selection\n";
    echo "---\n";
}

Выход:

before include d
**display limited d**
after include d
---
before include b
**display limited b**
after include b
---
before include a
**display limited a**
after include a
---
before include c
**display limited c**
after include c
---
before include e
after include e
---

Я перенесу другие мои комментарии в мой ответ, чтобы я мог удалить их ...

Это не имеет большого смысла:

$featurearray = array(
"<tr>",
"<td>$featuretitle</td>",
"</tr>"
);
$feature = implode("\n",$featurearray);

Поскольку $featurearray объявляется как массив одного элемента на каждой итерации (он продолжает перезаписываться), лучше использовать тип данных string вместо array. Поскольку имеется только один элемент, клей \n никогда не используется.

Я не рекомендую делать повторные изменения в вашем файле. Лучшим / более эффективным процессом было бы подготовить новые данные, а затем записать их в файл после завершения цикла. Я рекомендую редизайн ваших скриптов.

...