(PHP) Как правильно объединить список массивов в строку для file_put_contents? - PullRequest
0 голосов
/ 20 ноября 2018

Я играл с функцией ввода php, которая создаст HTML-страницу для игры, что-то вроде вики.Все идет хорошо и прекрасно, но при попытке построить массив в строку он возвращает несколько забавных ошибок.

Это происходит со всеми, кто использует массив, и я выхватил некоторый код, который работает независимо отсэкономить мне время, но просто не могу понять это.Я использую терминал Linux для запуска скрипта, и когда я устанавливаю его в эхо-цикл внутри цикла foreach, он делает это просто замечательно, просто не будет, когда я пытаюсь встроить его в файл HTML.

Здесьэто входной скрипт:

echo "\nHow many ranks were there (number)?:\n";
$facInputRankLimit = readline();
echo "Please read carefully and supply the ranks in descending order (HIGHEST > LOWEST):\n";
$facInputRankCount = 0;
$facInputRankString = "";
while ($facInputRankCount < $facInputRankLimit) {
    echo "Enter a rank:\n";
    $facInputRanks[$facInputRankCount] = readline();
    $facInputRankCount++;
}
foreach ($facInputRanks as $facInputRankList) {
    $facInputRankString .= $facInputRankList.PHP_EOL;
}

Затем я встроу его в многострочное эхо (вместо добавления каждого отдельного блока кода):

$facBuildPage = <<<EOT
<?php
\$facRankLimit = '$facInputRankLimit';
\$facRanks = '$facInputRankString';

include('faction2.html');
?>
EOT;

Переменные сПосле этого обратная косая черта будет встроена в «$ facFileName.php» и будет набором переменных, вводимых с помощью этого сценария (input2.php), каждая из которых будет также включать в себя одну и ту же HTML-страницу.

В довершениеполучаю действительно странные результаты ... если я создаю 5 рангов, каждый из которых "1 2 3 4 5", я на самом деле получаю "1 2 3" с двумя вертикальными разрывами строк между ними.

Редактировать: Отрезать некоторыея не хотел рисковать, добавляя недостаточно информации, но оказалось, что я добавил немного.

Например, вводимые данные:

$facInputRankLimit = 5;
$facInputRanks[1] = 1; -> $facInputRanks[5] = 5;

Но он печатает:

1<br><br>2<br><br>3

@ Deepkak - относительный код в faction2.html:

<div class="fpDivisions fpBox">
    <span class="header">Ranks</span><br>
    <?php
        $facRankCount = 0;
        while ($facRankCount < $facRankLimit) {
            echo $facRanks[$facRankCount].'<br>';
            $facRankCount++;
        }
    ?>
</div>

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Я создал обходной путь для этого, если кому-то понадобится какая-либо помощь в будущем.Это было так же просто, как вывести его из HTML-страницы, а не создавать цикл, который выполняется как через скрипт PHP, так и через HTML-код.

Входной код PHP:

echo "\nHow many ranks were there (number)?:\n";  
$facInputRankLimit = readline();  
echo "Please read carefully and supply the ranks in descending order (HIGHEST > LOWEST):\n";  
$facInputRankCount = 0;  
while ($facInputRankCount < $facInputRankLimit) {  
    echo "Enter a rank:\n";  
    $facInputRanks[$facInputRankCount] = readline();  
    $facInputRankCount++;
}
$facInputList = implode("<br>", $facInputRanks);

Вывод PHPкод:

$facBuildPage = <<<EOT
<?php
    \$facRanks = '$facInputList';

    include('faction2.html');
?>
EOT;

file_put_contents("test/$facFileName.php", $facBuildPage);

Код вывода HTML:

<div class="fpDivisions fpBox">
    <span class="header">Ranks</span><br>
    <?php echo $facRanks; ?>
</div>
0 голосов
/ 20 ноября 2018

Надеюсь, это решит проблему

<?php
echo "\nHow many ranks were there (number)?:\n";
$facInputRankLimit = readline();
echo "Please read carefully and supply the ranks in descending order (HIGHEST > LOWEST):\n";
$facInputRankCount = 0;
while ($facInputRankCount < $facInputRankLimit) {
    echo "Enter a rank:\n";
    $facInputRanks[$facInputRankCount] = readline();
    $facInputRankCount++;
}
$array = [];
foreach ($facInputRanks as $facInputRankList) {
    $array[] = "'".$facInputRankList."'";
}
$facInputRankString = "[".implode(",",$array)."]";

$facBuildPage = <<<EOT
<?php
\$facRankLimit = '$facInputRankLimit';
\$facRanks = $facInputRankString;

include('faction2.html');
?>
EOT;

echo $facBuildPage;
...