<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>duplabe</title>
    <link>http://duplabe.hu</link>
    <atom:link href="http://duplabe.hu/rss.xml" rel="self" type="application/rss+xml" />
    <description>stuff from coyled</description>
    <language>en-us</language>
    <pubDate>Sun, 19 Feb 2012 11:42:43 +0100</pubDate>
    <lastBuildDate>Sun, 19 Feb 2012 11:42:43 +0100</lastBuildDate>
    
    <item>
      <title>PHP iterátorok</title>
      <link>http://duplabe.hu/2012/02/07/php-iteratorok/</link>
      <pubDate>Tue, 07 Feb 2012 00:00:00 +0100</pubDate>
      <author>duplabe</author>
      <guid>http://duplabe.hu/2012/02/07/php-iteratorok</guid>
      <description>&lt;h1 id='php_itertorok'&gt;PHP Iterátorok&lt;/h1&gt;

&lt;p&gt;Gondoltam készítek egy részletes, de korántsem teljes leírást a PHP iterátorairól.&lt;/p&gt;

&lt;h2 id='spl'&gt;SPL&lt;/h2&gt;

&lt;p&gt;Az iterátorokkal kapcsolatos interfészek és osztályok az SPL (Standard PHP Library) csomagban találhatóak.&lt;/p&gt;

&lt;h2 id='iterator'&gt;Iterator&lt;/h2&gt;

&lt;p&gt;A PHP-s iterátorok az &lt;a href='http://php.net/manual/en/class.iterator.php'&gt;Iterator&lt;/a&gt; interfészen alapulnak, azt implementálják. Sok érdekesség nincs benne, a szokásos iterátorokkal kapcsolatos metódusokat szedi össze: current, key, next, rewind, valid.&lt;/p&gt;

&lt;h2 id='emptyiterator'&gt;EmptyIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/emptyiterator'&gt;EmptyIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Üres iterátor.&lt;/p&gt;

&lt;h2 id='arrayiterator'&gt;ArrayIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.arrayiterator.php'&gt;ArrayIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tömbökön és objektumokon iterálhatunk végig.&lt;/p&gt;

&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;Example&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;public&lt;/span&gt; &lt;span class='nv'&gt;$a&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;protected&lt;/span&gt; &lt;span class='nv'&gt;$b&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='k'&gt;private&lt;/span&gt; &lt;span class='nv'&gt;$_c&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;

    &lt;span class='k'&gt;public&lt;/span&gt; &lt;span class='k'&gt;function&lt;/span&gt; &lt;span class='nf'&gt;__construct&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$a&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;$b&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nv'&gt;$c&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;a&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;$a&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;b&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;$b&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
        &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;_c&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;$c&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;Iterate over an object&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;

&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;Example&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;));&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;Iterate over an array&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;

&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;));&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
Iterate over an object
1
Iterate over an array
1
2
3
&lt;/pre&gt;
&lt;h2 id='iteratoriterator'&gt;IteratorIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.iteratoriterator.php'&gt;IteratorIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href='http://php.net/manual/en/class.traversable.php'&gt;Traversable&lt;/a&gt; interfészt implementáló objektumokból iterátort csinál.&lt;/p&gt;

&lt;h2 id='norewinditerator'&gt;NoRewindIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.norewinditerator.php'&gt;NoRewindIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Iterator, amit nem lehet rewindolni, azaz, ha egyszer végigmentünk az összes elemen, nem lehet újra kezdeni az iterálást.&lt;/p&gt;

&lt;h2 id='infiniteiterator'&gt;InfiniteIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/InfiniteIterator'&gt;InfiniteIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Olyan iterátor, amellyel a végtelenségig iterálhatunk az elemeken, nem kell a rewindot meghívnunk.&lt;/p&gt;

&lt;h2 id='limititerator'&gt;LimitIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.limititerator.php'&gt;LimitIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Egy iterátor elemeinek részhalmazán mehetünk végig. A konstruktorában egy iterátoron kivül megadhatunk egy offset és egy count paramétert is.&lt;/p&gt;

&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$limitIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;LimitIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;range&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='p'&gt;)),&lt;/span&gt;
    &lt;span class='mi'&gt;5&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
    &lt;span class='mi'&gt;3&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$limitIterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
5
6
7
&lt;/pre&gt;
&lt;h2 id='filteriterator'&gt;FilterIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.filteriterator.php'&gt;FilterIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A FilterIterator egy belső iterátor elemiből tud szűrni. A FilterIterator egy abstract osztály, amelyben egy darab abstract metódus van, az accept(). Az accept() visszatérési értéke boolean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;true esetén az iterator elfogadja az elemet&lt;/li&gt;

&lt;li&gt;false esetén eldobja&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;OddFilterIterator&lt;/span&gt; &lt;span class='k'&gt;extends&lt;/span&gt; &lt;span class='nx'&gt;FilterIterator&lt;/span&gt;
&lt;span class='p'&gt;{&lt;/span&gt;

    &lt;span class='k'&gt;public&lt;/span&gt; &lt;span class='k'&gt;function&lt;/span&gt; &lt;span class='nf'&gt;accept&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;
    &lt;span class='p'&gt;{&lt;/span&gt;
        &lt;span class='nv'&gt;$current&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nv'&gt;$this&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;current&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;

        &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='nb'&gt;is_integer&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$current&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;&amp;amp;&lt;/span&gt;&lt;span class='nx'&gt;amp&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;&lt;span class='o'&gt;&amp;amp;&lt;/span&gt;&lt;span class='nx'&gt;amp&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt; &lt;span class='nv'&gt;$current&lt;/span&gt; &lt;span class='o'&gt;%&lt;/span&gt; &lt;span class='mi'&gt;2&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
    &lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;AppendIterator&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nv'&gt;$iterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;range&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;10&lt;/span&gt;&lt;span class='p'&gt;)));&lt;/span&gt;
&lt;span class='nv'&gt;$iterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;)));&lt;/span&gt;

&lt;span class='nv'&gt;$filterIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;OddFilterIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$iterator&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$filterIterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
1
3
5
7
9
&lt;/pre&gt;
&lt;h2 id='appenditerator'&gt;AppendIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.appenditerator.php'&gt;AppendIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Több belső iteratort tárol, és azokon megy végig, egymás után.&lt;/p&gt;

&lt;p&gt;A getArrayIterator() egy ArrayIterator-ban visszaadja az összes belső iteratort.&lt;/p&gt;

&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$iterator1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;range&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;3&lt;/span&gt;&lt;span class='p'&gt;));&lt;/span&gt;
&lt;span class='nv'&gt;$iterator2&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;range&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;4&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mi'&gt;6&lt;/span&gt;&lt;span class='p'&gt;));&lt;/span&gt;

&lt;span class='nv'&gt;$appendIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;AppendIterator&lt;/span&gt;&lt;span class='p'&gt;();&lt;/span&gt;
&lt;span class='nv'&gt;$appendIterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$iterator1&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$appendIterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$iterator2&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$appendIterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$key&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='nv'&gt;$value&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$key&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39; =&amp;gt; &amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nb'&gt;print_r&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$value&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='k'&gt;true&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;

&lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;getArrayIterator()&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$appendIterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;getArrayIterator&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$key&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='nv'&gt;$value&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$key&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39; =&amp;gt; &amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nb'&gt;print_r&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$value&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='k'&gt;true&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
0 =&gt; 0
1 =&gt; 1
2 =&gt; 2
3 =&gt; 3
0 =&gt; 4
1 =&gt; 5
2 =&gt; 6

getArrayIterator()

0 =&gt; ArrayIterator Object
(
    [storage:ArrayIterator:private] =&gt; Array
        (
            [0] =&gt; 0
            [1] =&gt; 1
            [2] =&gt; 2
            [3] =&gt; 3
        )

)

1 =&gt; ArrayIterator Object
(
    [storage:ArrayIterator:private] =&gt; Array
        (
            [0] =&gt; 4
            [1] =&gt; 5
            [2] =&gt; 6
        )

)
&lt;/pre&gt;
&lt;h2 id='multipleiterator'&gt;MultipleIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.multipleiterator.php'&gt;MultipleIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Az AppendIterator-hoz hasonlóan itt is több iterátoron mehetünk végig, de kicsit másképpen. Minden belső iterátorból kivesz egy elemet, majd egy tömbben összegyűjtve adja vissza iterációnként.&lt;/p&gt;

&lt;p&gt;Flagek:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MultipleIterator::MIT_KEYS_NUMERIC: a tömb numerikusan indexelt&lt;/li&gt;

&lt;li&gt;MultipleIterator::MIT_KEYS_ASSOC: a tömb asszociatív. A kulcsok az iterátorok hozzáadásánál adhatóak meg (attachIterator).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A belső iterátorok elemszáma különböző lehet, ezért két flaggel állíthatjuk be, hogy mi történjen akkor, ha valamelyikből elfogynak az elemek:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MultipleIterator::MIT_NEED_ANY: annyi elemet ad vissza, amennyit tud, a hiányzó elemeket null-okkal tölti fel.&lt;/li&gt;

&lt;li&gt;MultipleIterator::MIT_NEED_ALL: ha valamelyik iterátorból elfogynak az elemek, a MultipleIterator leáll.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$arrayIterator1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;4&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,));&lt;/span&gt;
&lt;span class='nv'&gt;$arrayIterator2&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;5&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;6&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;7&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,));&lt;/span&gt;
&lt;span class='nv'&gt;$arrayIterator3&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;8&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;9&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;10&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;11&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,));&lt;/span&gt;

&lt;span class='nv'&gt;$miterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;MultipleIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='nx'&gt;MultipleIterator&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;MIT_KEYS_ASSOC&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='nx'&gt;MultipleIterator&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;MIT_NEED_ALL&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$miterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;attachIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$arrayIterator1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$miterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;attachIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$arrayIterator2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$miterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;attachIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$arrayIterator3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;baz&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$miterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nb'&gt;var_export&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='k'&gt;true&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
Array
(
    [foo] =&gt; 1
    [bar] =&gt; 5
    [baz] =&gt; 8
)
Array
(
    [foo] =&gt; 2
    [bar] =&gt; 6
    [baz] =&gt; 9
)
Array
(
    [foo] =&gt; 3
    [bar] =&gt; 7
    [baz] =&gt; 10
)
&lt;/pre&gt;
&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$arrayIterator1&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;4&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,));&lt;/span&gt;
&lt;span class='nv'&gt;$arrayIterator2&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;5&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;6&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;7&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,));&lt;/span&gt;
&lt;span class='nv'&gt;$arrayIterator3&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ArrayIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='k'&gt;array&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;8&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;9&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;10&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;11&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,));&lt;/span&gt;

&lt;span class='nv'&gt;$miterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;MultipleIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='nx'&gt;MultipleIterator&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;MIT_KEYS_NUMERIC&lt;/span&gt; &lt;span class='o'&gt;|&lt;/span&gt; &lt;span class='nx'&gt;MultipleIterator&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;MIT_NEED_ANY&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$miterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;attachIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$arrayIterator1&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$miterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;attachIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$arrayIterator2&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$miterator&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;attachIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$arrayIterator3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='s1'&gt;&amp;#39;baz&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$miterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nb'&gt;var_export&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$item&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='k'&gt;true&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
Array
(
    [0] =&gt; 1
    [1] =&gt; 5
    [2] =&gt; 8
)
Array
(
    [0] =&gt; 2
    [1] =&gt; 6
    [2] =&gt; 9
)
Array
(
    [0] =&gt; 3
    [1] =&gt; 7
    [2] =&gt; 10
)
Array
(
    [0] =&gt; 4
    [1] =&gt;
    [2] =&gt; 11
)
&lt;/pre&gt;
&lt;h2 id='directoryiterator'&gt;DirectoryIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.directoryiterator.php'&gt;DirectoryIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Egy könyvtár elemein mehetünk végig vele. Az elemek &lt;a href='http://php.net/manual/en/class.splfileinfo.php'&gt;SplFileInfo&lt;/a&gt; objektumok.&lt;/p&gt;

&lt;p&gt;Könyvtár szerkezet az iterátorok bemutatására:&lt;/p&gt;
&lt;pre&gt;
|-example/b
| \-example/b/b.txt
|-example/c
\-example/a
  |-example/a/e
  | \-example/a/e/e.txt
  |-example/a/a.txt
  \-example/a/d
&lt;/pre&gt;
&lt;p&gt;Példa:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;DirectoryIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='s1'&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;);&lt;/span&gt;

&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$iterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$value&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$value&lt;/span&gt;&lt;span class='o'&gt;-&amp;gt;&lt;/span&gt;&lt;span class='na'&gt;getFilename&lt;/span&gt;&lt;span class='p'&gt;(),&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
b
..
c
.
a
&lt;/pre&gt;
&lt;h2 id='filesystemiterator'&gt;FilesystemIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.filesystemiterator.php'&gt;FilesystemIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasonló a DirectoryIterator-hoz, abból öröklődik. A konstructor alap esetben az alábbi flageket kapja:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KEY_AS_PATHNAME&lt;/li&gt;

&lt;li&gt;CURRENT_AS_FILEINFO&lt;/li&gt;

&lt;li&gt;SKIP_DOTS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;További flagek:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CURRENT_AS_PATHNAME: a current() az aktuális file elérésével tér vissza&lt;/li&gt;

&lt;li&gt;CURRENT_AS_FILEINFO: a current() egy SplFileInfo objektummal tér vissza&lt;/li&gt;

&lt;li&gt;CURRENT_AS_SELF: a current() az iterator-ral ($this) tér vissza&lt;/li&gt;

&lt;li&gt;KEY_AS_PATHNAME: a key() az aktuális file elérésével tér vissza&lt;/li&gt;

&lt;li&gt;KEY_AS_FILENAME: a key() az aktuális file nevével tér vissza&lt;/li&gt;

&lt;li&gt;FOLLOW_SYMLINKS: a hasChildren() követi a linkeket&lt;/li&gt;

&lt;li&gt;NEW_CURRENT_AND_KEY: ugyanaz mint a FilesystemIterator::KEY_AS_FILENAME | FilesystemIterator::CURRENT_AS_FILEINFO&lt;/li&gt;

&lt;li&gt;SKIP_DOTS: átugorja a .-ot és a ..-ot&lt;/li&gt;

&lt;li&gt;UNIX_PATHS: az elérési utakban /-t használ, a PHP-t futtató OS-től függetlenül (pl Windows-on is)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='globiterator'&gt;GlobIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/globiterator.construct.php'&gt;GlobIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href='http://php.net/manual/en/function.glob.php'&gt;glob()&lt;/a&gt; függvényhez hasonló funkcionalitással rendelkező iterátor.&lt;/p&gt;

&lt;h2 id='recursiveiteratoriterator'&gt;RecursiveIteratorIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.recursiveiteratoriterator.php'&gt;RecursiveIteratorIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A rekurzív iterátorokat &amp;#8220;linearizálja&amp;#8221;, azaz nem kell a gyermekekkel foglalkozni (ellenőrizni, hogy van e, és ha igen, akkor azokon is végigmenni).&lt;/p&gt;

&lt;p&gt;Három módon használható:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RecursiveIteratorIterator::LEAVES_ONLY: Csak a leveleken megy végig. Ez a default.&lt;/li&gt;

&lt;li&gt;RecursiveIteratorIterator::SELF_FIRST - Minden elemen végig megy, a szülőkkel kezd.&lt;/li&gt;

&lt;li&gt;RecursiveIteratorIterator::CHILD_FIRST: Minden elemen végig megy, a levelekkel kezd.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='parentiterator'&gt;ParentIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.parentiterator.php'&gt;ParentIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Segítségével RecursiveIterator-okból lehet kiszűrni azon elemeket, amelyeknek nincs gyermekük. A RecursiveDirectoryIterator példához visszanyúlva, listázzuk ki csak a könyvtárakat:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$directoryIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;RecursiveDirectoryIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='s1'&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
    &lt;span class='nx'&gt;RecursiveDirectoryIterator&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;SKIP_DOTS&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$treeIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;RecursiveTreeIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
	&lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;ParentIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$directoryIterator&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$treeIterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$node&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$node&lt;/span&gt; &lt;span class='o'&gt;.&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;

&lt;p&gt;Az üres könyvtárakat azért mutatja, mert ugye minden könyvtárban van egy hivatkozás önmagára (.) és a szülő könyvtárra (..), tehát van gyerekük.&lt;/p&gt;
&lt;pre&gt;
|-example/b
|-example/c
\-example/a
  |-example/a/e
  \-example/a/d
&lt;/pre&gt;
&lt;h2 id='recursivedirectoryiterator'&gt;RecursiveDirectoryIterator&lt;/h2&gt;

&lt;p&gt;&lt;a href='http://php.net/manual/en/class.recursivedirectoryiterator.php'&gt;RecursiveDirectoryIterator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A DirectoryIterator-hoz hasonlóan itt is egy könyvtár elemein mehetünk végig, de rekurzívan.&lt;/p&gt;

&lt;p&gt;Péda:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='php'&gt;&lt;span class='cp'&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class='nv'&gt;$directoryIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;RecursiveDirectoryIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='s1'&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt;
    &lt;span class='nx'&gt;RecursiveDirectoryIterator&lt;/span&gt;&lt;span class='o'&gt;::&lt;/span&gt;&lt;span class='na'&gt;SKIP_DOTS&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='nv'&gt;$treeIterator&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='k'&gt;new&lt;/span&gt; &lt;span class='nx'&gt;RecursiveTreeIterator&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
    &lt;span class='nv'&gt;$directoryIterator&lt;/span&gt;
&lt;span class='p'&gt;);&lt;/span&gt;
&lt;span class='k'&gt;foreach&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nv'&gt;$treeIterator&lt;/span&gt; &lt;span class='k'&gt;as&lt;/span&gt; &lt;span class='nv'&gt;$key&lt;/span&gt; &lt;span class='o'&gt;=&amp;gt;&lt;/span&gt; &lt;span class='nv'&gt;$node&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='p'&gt;{&lt;/span&gt;
    &lt;span class='k'&gt;echo&lt;/span&gt; &lt;span class='nv'&gt;$node&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='nx'&gt;PHP_EOL&lt;/span&gt;&lt;span class='p'&gt;;&lt;/span&gt;
&lt;span class='p'&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Kimenet:&lt;/p&gt;
&lt;pre&gt;
|-example/b
| \-example/b/b.txt
|-example/c
\-example/a
  |-example/a/e
  | \-example/a/e/e.txt
  |-example/a/a.txt
  \-example/a/d
&lt;/pre&gt;
&lt;h2 id='rekurzv_itertorok'&gt;Rekurzív iterátorok&lt;/h2&gt;

&lt;p&gt;Szinte az összes (itt nem is említett) iterátornak van rekurzív párja:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RecursiveArrayIterator&lt;/li&gt;

&lt;li&gt;RecursiveCachingIterator&lt;/li&gt;

&lt;li&gt;RecursiveCallbackFilterIterator&lt;/li&gt;

&lt;li&gt;RecursiveFilterIterator&lt;/li&gt;

&lt;li&gt;RecursiveRegexIterator&lt;/li&gt;

&lt;li&gt;RecursiveTreeIterator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A cikknek példákkal együtt van saját repoja: &lt;a href='https://github.com/duplabe/php-iterators'&gt;php-iterators&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lehet jönni forkolni, javítani, bővíteni :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Jekyll</title>
      <link>http://duplabe.hu/2012/01/14/jekyll/</link>
      <pubDate>Sat, 14 Jan 2012 00:00:00 +0100</pubDate>
      <author>duplabe</author>
      <guid>http://duplabe.hu/2012/01/14/jekyll</guid>
      <description>&lt;h1 id='jekyll'&gt;Jekyll&lt;/h1&gt;

&lt;p&gt;Ahogy &lt;a href='/2012/01/11/uj-oldal/'&gt;ígértem&lt;/a&gt; írok pár szót arról, hogy mi is az a &lt;a href='http://jekyllrb.com/'&gt;Jekyll&lt;/a&gt; és mire jó.&lt;/p&gt;

&lt;p&gt;Röviden a Jekyll egy ruby gem amellyel statikus oldalakat generálhatunk. Egy oldal összeállításához a jekyll-len kívűl pár könyvtár és file kell csak, amelyekből legenerálja az egész oldalt. Akinek esetleg van GitHub oldala azok már találkozhattak vele, hiszen ott is &lt;a href='http://pages.github.com/'&gt;lehetőség van&lt;/a&gt; a használatára.&lt;/p&gt;

&lt;p&gt;A jekyll a &lt;a href='http://liquidmarkup.org/'&gt;Liquid&lt;/a&gt; nevű ruby template enginet használja. Nem kell túl bonyolult dologra gondolni, aki már látott template enginet, el fog vele boldogúlni.&lt;/p&gt;

&lt;p&gt;Lehetőségünk van különböző leíró nyelvek haszálatára: HTML, markdown, textile. Én a makdownt választottam. A jekyll a fileok kiterjesztéséből tudja, hogy milyen feldolgozón kell átengednie.&lt;/p&gt;

&lt;h2 id='telepts'&gt;Telepítés&lt;/h2&gt;
&lt;pre&gt;
apt-get install ruby1.8-dev rubygems1.8
gem install jekyll
&lt;/pre&gt;
&lt;p&gt;Nincs sok függősége: directory_watcher, liquid, open4, maruku, classifier.&lt;/p&gt;

&lt;h2 id='knyvtrszerkezet'&gt;Könyvtárszerkezet&lt;/h2&gt;
&lt;pre&gt;
_includes
_layouts
    default.html
    post.html
_plugins
_posts
    2012-01-14-pelda-post.markdown
_site
_config.yml
index.html
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;code&gt;\_congig.yml&lt;/code&gt; tartalmazza a &lt;a href='https://github.com/mojombo/jekyll/wiki/configuration'&gt;beállításokat&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;az &lt;code&gt;index.html&lt;/code&gt; lesz a főoldalunk.&lt;/li&gt;

&lt;li&gt;az &lt;code&gt;\_inludes&lt;/code&gt; olyan templateeket tartalmaz, amiket más templateekben használhatunk az &lt;code&gt; {% include file.ext %} &lt;/code&gt; taggel.&lt;/li&gt;

&lt;li&gt;a &lt;code&gt;\_layouts&lt;/code&gt; mappa tartalmazza azokat a templateket, amelyeket az oldal összeállításához használhatunk.&lt;/li&gt;

&lt;li&gt;a jekyll bővíthető pluginekkel, ezeket a &lt;code&gt;\_plugin&lt;/code&gt; mappába kell tenni&lt;/li&gt;

&lt;li&gt;a &lt;code&gt;\_posts&lt;/code&gt; tartalmazza a bejegyzéseinket. Látható, hogy a file nevében van a publikálás dátuma, és a slug amelyen keresztűl majd elérhető a bejegyzés.&lt;/li&gt;

&lt;li&gt;a &lt;code&gt;\_site&lt;/code&gt; könyvtárban lesz a legenerált oldal. Konfigban megadható más cél is.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='yaml_front_matter'&gt;YAML Front Matter&lt;/h2&gt;

&lt;p&gt;Minden file, amely elején ott van egy YAML formátumú konfigurációs rész, átfut a jekyllen.&lt;/p&gt;

&lt;p&gt;Ez például így nézhet ki:&lt;/p&gt;
&lt;pre&gt;
---
layout: post
title: Példa post
---
&lt;/pre&gt;
&lt;p&gt;Ez annyit tesz, hogy ez a bejegyzés a post layout-ot fogja használni és a title Példa post lesz.&lt;/p&gt;

&lt;p&gt;A jekyll minden egyéb filet érintetlenül átmásol a célként megadott könyvtárba.&lt;/p&gt;

&lt;h2 id='elrhet_vltozk'&gt;Elérhető változók&lt;/h2&gt;

&lt;p&gt;A templateekben az alábbi változók érhetőek el: &lt;a href='https://github.com/mojombo/jekyll/wiki/template-data'&gt;Template data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;site&lt;/code&gt; változóban elérhetőek a &lt;code&gt;_config.yml&lt;/code&gt;-ben beállított értékek is.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;post&lt;/code&gt;-ban pedig azok, amiket a postok elején lévő YAML-ban megadunk. Én például minden posthoz megadok egy &lt;code&gt;excerpt&lt;/code&gt; változót, amely egy pár szavas rövid leírást ad az adott bejegyzésről és ezt az &lt;code&gt;index.html&lt;/code&gt;-ben a post címe után kiírom.&lt;/p&gt;

&lt;h2 id='hasznlat'&gt;Használat&lt;/h2&gt;

&lt;p&gt;A gyökérben egy egyszerű&lt;/p&gt;
&lt;pre&gt;
jekyll
&lt;/pre&gt;
&lt;p&gt;parancsal inditható is a generálás. Ez kiüríti a cél könyvtárat, majd a legenerált tartalommal feltölti.&lt;/p&gt;

&lt;p&gt;A jekyll futtatható szerverként is:&lt;/p&gt;
&lt;pre&gt;
jekyll --server --auto
&lt;/pre&gt;
&lt;p&gt;Ilyen esetben a &lt;code&gt;4000&lt;/code&gt;-es porton elérhető a legenerált oldal. Az &lt;code&gt;auto&lt;/code&gt; flaggel a jekyll figyeli a filokon történt változásokat, és ilyen esetben újra generálja az oldalt. A dokumentációban konrétan nem láttam - legalábbis nem rémlik -, de nem hiszem, hogy ez a beépített server éles környezetben való használatra lenne, inkább teszt célokat szolgál.&lt;/p&gt;

&lt;p&gt;Nálam (Ubuntu 11.10, VBox-ban) egyébként az &lt;code&gt;auto&lt;/code&gt; nem is működik, mert a directory_watcher gemmel valami nem ok és emiatt be se tudja tölteni. Van rá megoldás (a gemmet localban újra kell fordítani) de annyira nem éreztem hiányát, hogy foglalkozzak vele.&lt;/p&gt;

&lt;h2 id='migrls'&gt;Migrálás&lt;/h2&gt;

&lt;p&gt;Lehetőség van a már meglévő wp, drupal, de akár tumblr, vagy posterous oldalunkat is jekyllre &lt;a href='https://github.com/mojombo/jekyll/wiki/blog-migrations'&gt;migrálni&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='konklzi'&gt;Konklúzió&lt;/h2&gt;

&lt;p&gt;Amint látható nem egy bonyolult dologról van szó. Amikor kitaláltam, hogy újra élesztem kicsit az oldalam, pont ilyen megoldásra gondoltam. Nincs szükségem CMS-re, összetett admin felületekre. Az már csak hab a tortán, hogy az egész verziókezelhető is.&lt;/p&gt;

&lt;h3 id='forrs'&gt;Forrás&lt;/h3&gt;

&lt;p&gt;Az egész oldal forrása megtalálható &lt;a href='https://github.com/duplabe/duplabe.hu'&gt;GitHubon&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Új oldal</title>
      <link>http://duplabe.hu/2012/01/11/uj-oldal/</link>
      <pubDate>Wed, 11 Jan 2012 00:00:00 +0100</pubDate>
      <author>duplabe</author>
      <guid>http://duplabe.hu/2012/01/11/uj-oldal</guid>
      <description>&lt;h1 id='j_oldal'&gt;Új oldal&lt;/h1&gt;

&lt;p&gt;Jekyll alapokra helyezve újraírtam az oldalam. Amint látható nem variáltam túl a dolgot. Vannak elérhetőségek, pár velem kapcsolatos link, plusz a sidebar alján a delicious-ön megosztott linkjeim közül a legfrissebb 10.&lt;/p&gt;

&lt;p&gt;Miket használtam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://jekyllrb.com/'&gt;Jekyll&lt;/a&gt;, &lt;a href='http://jekyllbootstrap.com/'&gt;Jekyll Bootstrap&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://html5boilerplate.com/'&gt;HTML5 Boilerplate&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://twitter.github.com/bootstrap/'&gt;Twitter Bootstrap&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.addthis.com/'&gt;AddThis&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://disqus.com'&gt;Disqus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mindegyikről - és még sok egyébről is - tervezek bejegyzést írni, meglátjuk mi lesz belőle.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
