У меня есть список элементов, взятых из файла на моем сервере.

Я скрываю определенные имена файлов, как вы можете видеть в моем коде, но переменная, которую я использую "$ filelist", скрывает только последнее значение в массиве, а не все значения.

Как вы можете видеть на изображении ниже, A15 и A17 должны быть скрыты, но только A17.

Как я могу использовать $ filelist, чтобы скрыть все значения в нем, а не только последнее?

while ($row = mysql_fetch_assoc($result)) {
     $filelist = $row["file"];
     echo "<input type=\"checkbox\" value=\"$filelist\" name=\"files[]\" checked=\"checked\"/>&nbsp;&nbsp;$filelist<br />";
}

echo "<br>";

$dirname = "/var/www/vhosts/hub.gkrmaintenance.co.uk/public_html/forms/templates";
$forms = scandir($dirname);

sort($forms);

foreach ($forms as $file) {

if(($file != ".") and
   ($file != "..") and
   ($file != "index.php") and
   ($file != "Site Induction Sheet.docx") and
   ($file != "Method Statement Complete.docx") and
   ($file != "Construction Phase Plan Complete.docx") and
   ($file != "Method Statement.docx") and
   ($file != "Construction Phase Plan.docx") and 
   ($file != $filelist))

   {
       echo "<input type=\"checkbox\" value=\"$file\" name=\"files[]\" />&nbsp;&nbsp;$file<br />";
   }
}

enter image description here

php
0
RossH 14 Мар 2018 в 14:12

2 ответа

Лучший ответ

Добавьте имя файла, который вы хотите скрыть, в массив $filelist, а затем проверьте, находится ли $file в этом массиве, используя in_array

$filelist = [];
while ($row = mysql_fetch_assoc($result)) {
    $filelist[] = $file = $row["file"];
    echo "<input type=\"checkbox\" value=\"$file\" name=\"files[]\" checked=\"checked\"/>&nbsp;&nbsp;$file<br />";
}
$filelist[] = ".";
$filelist[] = "..";
$filelist[] = "index.php";
$filelist[] = "Site Induction Sheet.docx";
$filelist[] = "Method Statement Complete.docx";
$filelist[] = "Construction Phase Plan Complete.docx";
$filelist[] = "Method Statement.docx";
$filelist[] = "Construction Phase Plan.docx";
echo "<br>";
$dirname = "/var/www/vhosts/hub.gkrmaintenance.co.uk/public_html/forms/templates";
$forms = scandir($dirname);
sort($forms);
foreach ($forms as $file) {
    if (!in_array($file, $filelist)) {
        echo "<input type=\"checkbox\" value=\"$file\" name=\"files[]\" />&nbsp;&nbsp;$file<br />";
    }
}
1
ponury-kostek 14 Мар 2018 в 11:35

Ваш $filelist не является списком, это просто последний элемент списка. Вы можете использовать способ in_array() из другого ответа или способ ! isset() здесь:

$file_seen = array();

while ($row = mysql_fetch_assoc($result)) {
     $file = $row["file"];
     echo "<input type=\"checkbox\" value=\"$file\" name=\"files[]\" checked=\"checked\"/>&nbsp;&nbsp;$file<br />";
     $file_seen[ $file ] = true;
}

…

foreach ($forms as $file) {
  if( … and
    ( ! isset( $file_seen[ $file ])
  ){
       echo "<input type=\"checkbox\" value=\"$file\" name=\"files[]\" />&nbsp;&nbsp;$file<br />";
   }
}
1
biziclop 14 Мар 2018 в 11:18