PHP Help с оператором if для динамического включения файлов - PullRequest
1 голос
/ 28 апреля 2010

У меня есть эти файлы:

"id_1_1.php", "id_1_2.php", "id_1_3.php" и т. Д. "id_2_1.php", "id_2_2.php", "id_2_3.php" и т. д.

количество файлов неизвестно, потому что всегда будет расти ..

все файлы находятся в одном каталоге ..

Я хочу сделать заявление if:

  1. включить файлы только в том случае, если их имя оканчивается на "_1"
  2. еще одна функция для загрузки всех файлов, которые начинаются с "id_1"

Как я могу это сделать? Спасибо!

edit1: никакие номера не будут пропущены, как только у меня будет другой элемент для коллекции продуктов id_1_, я добавлю новые как id_1_1, id_1_2 и т. Д., Так что пропуск не будет

Ответы [ 4 ]

1 голос
/ 28 апреля 2010
// Each of these:
//   - scans the directory for all files
//   - checks each file
//   - for each file, does it match the pattern described
//   - if it does, expand the path
//   - include the file once

function includeFilesBeginningWith($dir, $str) {
    $files = scandir($dir);
    foreach ($files as $file) {
        if (strpos($file, $str) === 0) {
            $path = $dir . '/' . $file;
            include_once($path);
        }
    }
}

function includeFilesEndingWith($dir, $str) {
    $files = scandir($dir);
    foreach ($files as $file) {
        if (strpos(strrev($file), strrev($str)) === 0) {
            $path = $dir . '/' . $file;
            include_once($path);
        }
    }
}

/* To use: - the first parameter is ".",
   the current directory, you may want to
   change this */
includeFilesBeginningWith('.', 'id_1');
includeFilesEndingWith('.', '_1.php');
1 голос
/ 28 апреля 2010

Свободно на основании исходного ответа Свистака (не проверено):

function doIncludes($pre='',$post=''){
    for ($i=1;1;$i++)
        if (file_exists($str=$pre.$i.$post.'.php'))
            include($str);
        else
            return;
}

function first_function(){
    doIncludes('id_','_1');
}

function second_function(){
    doIncludes('id_1_');
}
1 голос
/ 28 апреля 2010

Это будет анализировать каждый файл, увеличивая его на единицу, пока не найдет файл, который не существует.Принимая непрерывные числа, он должен перехватывать все существующие файлы.Если вы хотите включить файлы с номером, отличным от 1 в названии, просто измените значение $ lookingfor.

1 голос
/ 28 апреля 2010
function my_include($f, $s)
{
    @include_once("id_" . $f . "_" . $s . ".php");
}


function first_function($howmany = 100, $whatstart = '1')
{
    for ($i=1; $i <= $howmany; $i++)
    {
        my_include('1', $i)
    }
}

function second_function($howmany = 100, $whatend = '1')
{
    for ($i=1; $i <= $howmany; $i++)
    {
        my_include($i, '1');
    }
}
...