Php 将foreach拆分为多页 $files=glob('docs/*.xml'); foreach($files作为$file){ $xml=newsimplexmlement($file,0,true); 回声' “.$xml->doctype” “.$xml->date” * * * * * '; }

Php 将foreach拆分为多页 $files=glob('docs/*.xml'); foreach($files作为$file){ $xml=newsimplexmlement($file,0,true); 回声' “.$xml->doctype” “.$xml->date” * * * * * '; },php,xml,Php,Xml,上面的代码是一个循环,它向我显示docs文件夹中的所有文件。 我希望在一个页面中只包含10个xml文件,并将每个页面拆分为10个文件。 如何执行此操作?您可以使用以下方法之一拆分$files数组,这两种方法都需要设置$page变量,该变量将是一个整数,显示要查看的10个xml文件页 $files = glob('docs/*.xml'); foreach($files as $file){ $xml = new SimpleXMLElement($file, 0, true); echo'

上面的代码是一个循环,它向我显示docs文件夹中的所有文件。 我希望在一个页面中只包含10个xml文件,并将每个页面拆分为10个文件。
如何执行此操作?

您可以使用以下方法之一拆分$files数组,这两种方法都需要设置$page变量,该变量将是一个整数,显示要查看的10个xml文件页

$files = glob('docs/*.xml');
 foreach($files as $file){
 $xml = new SimpleXMLElement($file, 0, true);
 echo'
 <tr>
 <td>' . $xml->doctype . '</td>
 <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
 <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
 <td>'. $xml->date .'</td>
 <td>* * * * *</td>
 <td></td>
 </tr>
 ';
}
//这将使文件成为10个元素的数组
$files=glob('docs/*.xml');
$files=array_chunk($files,10);
foreach($files[$page-1]作为$file){
$xml=newsimplexmlement($file,0,true);
回声'
“.$xml->doctype”
“.$xml->date”
* * * * *
';
}
或者,您可以使用数组切片来获取所需的10

// this will make files an array for 10 element 
$files = glob('docs/*.xml');
$files = array_chunk($files, 10);
foreach($files[$page-1] as $file){ 
$xml = new SimpleXMLElement($file, 0, true);
echo'
    <tr>
    <td>' . $xml->doctype . '</td>
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
    <td>'. $xml->date .'</td>
    <td>* * * * *</td>
    <td></td>
    </tr>
    ';
}
$files=glob('docs/*.xml');
$files=array_slice($files,($page-1)*10,10);
foreach($files作为$file){
$xml=newsimplexmlement($file,0,true);
回声'
“.$xml->doctype”
“.$xml->date”
* * * * *
';
}

您可以使用以下方法之一拆分$files数组,这两种方法都需要设置$page变量,该变量将是一个整数,显示要查看的10个xml文件页

$files = glob('docs/*.xml');
 foreach($files as $file){
 $xml = new SimpleXMLElement($file, 0, true);
 echo'
 <tr>
 <td>' . $xml->doctype . '</td>
 <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
 <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
 <td>'. $xml->date .'</td>
 <td>* * * * *</td>
 <td></td>
 </tr>
 ';
}
//这将使文件成为10个元素的数组
$files=glob('docs/*.xml');
$files=array_chunk($files,10);
foreach($files[$page-1]作为$file){
$xml=newsimplexmlement($file,0,true);
回声'
“.$xml->doctype”
“.$xml->date”
* * * * *
';
}
或者,您可以使用数组切片来获取所需的10

// this will make files an array for 10 element 
$files = glob('docs/*.xml');
$files = array_chunk($files, 10);
foreach($files[$page-1] as $file){ 
$xml = new SimpleXMLElement($file, 0, true);
echo'
    <tr>
    <td>' . $xml->doctype . '</td>
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
    <td>'. $xml->date .'</td>
    <td>* * * * *</td>
    <td></td>
    </tr>
    ';
}
$files=glob('docs/*.xml');
$files=array_slice($files,($page-1)*10,10);
foreach($files作为$file){
$xml=newsimplexmlement($file,0,true);
回声'
“.$xml->doctype”
“.$xml->date”
* * * * *
';
}

您应该更多地使用PHP中的迭代器来划分作业:

$files = glob('docs/*.xml');
$files = array_slice($files, ($page-1)*10, 10);
foreach ($files as $file){
$xml = new SimpleXMLElement($file, 0, true);
echo'
    <tr>
    <td>' . $xml->doctype . '</td>
    <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
    <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
    <td>'. $xml->date .'</td>
    <td>* * * * *</td>
    <td></td>
    </tr>
    ';
}
那么这是如何工作的呢?首先,通过使用预定义的名称,您可能已经看到了它的功能。但它不是像
glob()
那样返回数组,而是一个迭代器

这在这里特别适用于允许与其他迭代器堆叠。例如,下一个是具体的,因此您需要将当前用于筛选决策的代码移动到此迭代器中。PHP手册中记录了它的工作原理

然后,使用函数获得所有过滤文件的计数,该函数随后与
LimitPagination
对象一起使用,该对象将分页完全封装到它自己的对象中。有关详细信息,请参阅my

它通过
$pagination->getLimitIterator($filtered)
提供另一个迭代器,以便提供指定页面内的那些过滤文件(
$\u GET['page']
,在上面的示例中)。它还提供了一个页面列表,以便您可以将链接输出到其他页面

那么,我们在这里做了什么:

  • 过滤文件的问题已封装到过滤器迭代器中
  • 您的分页问题已封装到一个分页对象中,该对象还提供了一个迭代器
  • 通过将数组转换为迭代器,可以解决过滤全局文件的问题
  • 从技术上讲,您也可以使用数组解决所有这些问题,但是这里使用迭代器的最大好处是,迭代器比数组灵活得多

    例如,您可以通过创建一个迭代器来进一步改进这一点,该迭代器将创建
    simplexmlement
    的一个特殊子级,该子级还包含获取doctype的算法,并且知道文件路径。给它一个独特的接口将有助于过滤器迭代器

    另外,由于涉及分页,缓存过滤器迭代器是有意义的,这样计数操作的权重就不会太大

    这里迭代器的优点显然是代码重用,例如,
    LimitPagination
    对象只适用于任何类型的分页,您可以以迭代器的形式为这些分页提供数据


    如果你想坚持使用数组,你需要把它变成一个
    ArrayPagination
    对象,而不是过滤器迭代器,你可以使用一个回调函数来过滤你的文件。如果您使用数组进行原型设计,还有
    ArrayIterator
    ,因此您可以从数组切换到迭代器(还有
    CallbackFilterIterator
    ,它还可以让您重复使用数组过滤函数)。

    您应该更多地使用PHP中的迭代器来划分作业,甚至:

    $files = glob('docs/*.xml');
    $files = array_slice($files, ($page-1)*10, 10);
    foreach ($files as $file){
    $xml = new SimpleXMLElement($file, 0, true);
    echo'
        <tr>
        <td>' . $xml->doctype . '</td>
        <td><a href="viewdoc.php?docname=' . basename($file, '.xml') . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename($file, '.xml') . '</a></td>
        <td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
        <td>'. $xml->date .'</td>
        <td>* * * * *</td>
        <td></td>
        </tr>
        ';
    }
    
    那么这是如何工作的呢?首先,通过使用预定义的名称,您可能已经看到了它的功能。但它不是像
    glob()
    那样返回数组,而是一个迭代器

    这在这里特别适用于允许与其他迭代器堆叠。例如,下一个是具体的,因此您需要将当前用于筛选决策的代码移动到此迭代器中。PHP手册中记录了它的工作原理

    然后,使用函数获得所有过滤文件的计数,该函数随后与
    LimitPagination
    对象一起使用,该对象将分页完全封装到它自己的对象中。有关详细信息,请参阅my

    它通过
    $pagination->getLimitIterator($filtered)
    提供另一个迭代器,以便提供指定页面内的那些过滤文件(
    $\u GET['page']
    ,在上面的示例中)。它还提供了一个页面列表,以便您可以将链接输出到其他页面

    那么,我们在这里做了什么:

  • 您筛选文件的问题已解决