<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Andronicus Riyono</title>
	<atom:link href="http://riyono.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://riyono.com</link>
	<description></description>
	<lastBuildDate>Wed, 25 Aug 2010 23:59:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Pola dulu atau paket dulu?</title>
		<link>http://riyono.com/2010/08/pola-dulu-atau-paket-dulu/</link>
		<comments>http://riyono.com/2010/08/pola-dulu-atau-paket-dulu/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 23:59:29 +0000</pubDate>
		<dc:creator>Riyono</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[flags]]></category>
		<category><![CDATA[pattern matching]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[preg_match]]></category>
		<category><![CDATA[tahukah anda]]></category>

		<guid isPermaLink="false">http://riyono.com/?p=26</guid>
		<description><![CDATA[Fungsi preg_match_all adalah salah satu fungsi yang dapat membantu mendapatkan data berdasarkan pola sebuah string. Ada satu fitur—sebuah flag, tepatnya—berguna dari preg_match_all yang (menurut saya) jarang dibahas orang, yaitu PREG_SET_ORDER. Mengapa saya menganggap ini benar-benar berguna dan bagaimana contoh aplikasi nyatanya?]]></description>
			<content:encoded><![CDATA[<p>Mengenali pola dalam string sangat berguna untuk mendapatkan data yang diinginkan dari bentuk teks atau html—tentunya bentuk yang ada polanya, bukan bentuk acak. Fungsi <code><a href="http://php.net/preg_match_all">preg_match_all</a></code> adalah salah satu fungsi yang dapat membantu mendapatkan data berdasarkan pola sebuah string. Ada satu fitur—sebuah flag, tepatnya—berguna dari <code>preg_match_all</code> yang (menurut saya) jarang dibahas orang, yaitu <code>PREG_SET_ORDER</code>. Mengapa saya menganggap ini benar-benar berguna dan bagaimana contoh aplikasi nyatanya? Mari kita lihat contoh berikut ini.</p>
<p><span id="more-26"></span></p>
<p>Untuk contoh mengambil data dengan mengenali pola, saya akan menggunakan sebuah file xml yang diupdate harian dari <a href="http://www.ecb.int/">European Central Bank</a>, yaitu file <a href="http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml">eurofxref-daily.xml</a>. Karena fokusnya adalah mengenai <code>PREG_SET_ORDER</code> dan bukan mengenai bagaimana mengambil data dari Internet, maka diasumsikan bahwa isi file tersebut sudah dimiliki dalam sebuah variabel <code>$xml</code>. Data yang akan diambil adalah pasangan mata uang dan nilai tukarnya terhadap euro—karena memang ini yang disediakan ECB dengan file XML tersebut.</p>
<p>Dengan membuat kode seperti contoh di bawah ini:</p>
<pre name="code" class="php">
preg_match_all("/currency='([A-Z]{3})' rate='([0-9.]+)'/", $xml, $matches);
print_r($matches);
</pre>
<p>Kita akan mendapatkan hasil sebagai berikut (sebagian hasil disembunyikan agar tidak terlalu panjang):</p>
<pre name="code">
Array
(
    [0] => Array
        (
            [0] => currency='USD' rate='1.2613'
            [1] => currency='JPY' rate='106.49'
            [2] => currency='BGN' rate='1.9558'
	    ...zapped...
        )

    [1] => Array
        (
            [0] => USD
            [1] => JPY
            [2] => BGN
	    ...zapped...
        )

    [2] => Array
        (
            [0] => 1.2613
            [1] => 106.49
            [2] => 1.9558
	    ...zapped...
        )
)
&nbsp;
</pre>
<p>Dari hasil tersebut dapat kita lihat bahwa <code>preg_match_all</code> menghasilkan <code>$matches</code> yang berupa sebuah <code>array</code> dengan index 0 berisi keseluruhan pola yang cocok, index 1 berisi data kode-kode mata uang yang didapatkan dari pola pertama, yaitu <code>([A-Z]{3})</code>, kemudian index 2 berisi data nilai tukar yang didapatkan dari pola kedua, yaitu <code>([0-9.]+)</code>. Hal ini agak menyulitkan ketika kita memerlukan pasangan mata uang dan nilai tukarnya, karena berarti kita harus berpatokan pada index salah satu array (mata uang atau nilai tukar) dan menggunakannya untuk mengambil pasangannya, misal seperti ini:</p>
<pre name="code" class="php">
foreach ($matches[1] as $key => $currency) {
  echo '1 EUR = ' . $matches[2][$key] . ' ' . $currency . "\n";
}
</pre>
<pre name="code">
1 EUR = 1.2613 USD
1 EUR = 106.49 JPY
1 EUR = 1.9558 BGN
...zapped...
&nbsp;
</pre>
<p>Pada kasus semacam inilah <code>PREG_SET_ORDER</code> memberi kenyamanan yang lebih. Karena dengan <code>PREG_SET_ORDER</code> PHP akan mengembalikan sebuah <code>array</code> yang dipisah berdasarkan paket, bukan pola. Jadi, index 1 dari <code>$matches</code> akan berisi paket yang pertama (yaitu mata uang USD). Agar lebih jelas tanpa berbelit-belit, Anda dapat lihat kode dan hasilnya berikut ini:</p>
<pre name="code" class="php">
preg_match_all("/currency='([A-Z]{3})' rate='([0-9.]+)'/", $xml, $matches, PREG_SET_ORDER);
print_r($matches);
foreach ($matches as $pair) {
  echo '1 EUR = ' . $pair[2] . ' '  . $pair[1] . "\n";
}
</pre>
<pre name="code">
Array
(
    [0] => Array
        (
            [0] => currency='USD' rate='1.2613'
            [1] => USD
            [2] => 1.2613
        )

    [1] => Array
        (
            [0] => currency='JPY' rate='106.49'
            [1] => JPY
            [2] => 106.49
        )

    [2] => Array
        (
            [0] => currency='BGN' rate='1.9558'
            [1] => BGN
            [2] => 1.9558
        )
        ...zapped...
)
1 EUR = 1.2613 USD
1 EUR = 106.49 JPY
1 EUR = 1.9558 BGN
...zapped...
&nbsp;
</pre>
<p>Dengan demikian <code>$matches</code> menjadi lebih masuk akal karena mengembalikan setiap paket kecocokan, dan bukan mengembalikan setiap polanya. Entah mengapa ini bukan perilaku <em>default</em> dari <code>preg_match_all</code>. <em>Happy Coding!</em> <abbr title="Your mileage may vary">YMMV</abbr>!</p>
]]></content:encoded>
			<wfw:commentRss>http://riyono.com/2010/08/pola-dulu-atau-paket-dulu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menyisipkan blok debug pada skrip PHP</title>
		<link>http://riyono.com/2010/08/menyisipkan-blok-debug-pada-skrip-php/</link>
		<comments>http://riyono.com/2010/08/menyisipkan-blok-debug-pada-skrip-php/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 17:28:57 +0000</pubDate>
		<dc:creator>Riyono</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[produktivitas]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://riyono.com/?p=12</guid>
		<description><![CDATA[Tips untuk melakukan secara cepat pengaktifan maupun penonaktifan sebuah blok debug dalam bahasa pemrograman PHP.]]></description>
			<content:encoded><![CDATA[<p>Seringkali dalam proses pengembangan sebuah aplikasi berbasis web, pengembang perlu membuat satu blok debug yang terdiri dari beberapa baris. Blok debug ini kemudian diaktifkan dan dinonaktifkan sesuai kebutuhan, proses pengaktifan dan penonaktifan semacam ini biasanya berlangsung berulang kali. Terlihat sederhana memang, tetapi bila Anda dapat menghemat waktu untuk kegiatan yang berlangsung berulang-ulang, maka penghematan sesedikit apapun akan berkontribusi cukup besar karena perulangan yang terjadi. <span id="more-12"></span></p>
<p>Berikut ini adalah tips untuk melakukan secara cepat pengaktifan maupun penonaktifan sebuah blok debug dalam bahasa pemrograman PHP.</p>
<pre name="code" class="php">/* awali blok debug dengan baris pembuka seperti ini */
function microtime_float() {
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
// kemudian akhiri dengan baris penutup seperti ini */

/* cukup tambahkan atau hilangkan dua karakter
$time_end = microtime_float();
$time = $time_end - $time_start;
echo 'done in ' . $time . ' seconds.';
// untuk mengaktifkan atau menonaktifkannya */
</pre>
<p>Dengan mengawali blok debug Anda dengan cara seperti contoh di atas,  ketika Anda memiliki <code>*/</code> di akhir baris pembuka, maka baris tersebut dianggap sebagai komentar, sedangkan baris berikutnya akan dieksekusi karena komentar telah berakhir dengan <code>*/</code> yang Anda sisipkan.</p>
<p>Sementara, dengan menghilangkan <code>*/</code> dari baris pembuka, komentar akan berakhir di ujung baris penutup. Bagian pentingnya adalah penanda <code>//</code> di awal baris penutup, yang membuat baris itu sebagai baris komentar yang utuh, sehingga tidak terpengaruh oleh keberadaan <code>*/</code> di baris pembuka.</p>
<p style="text-align: right;"><em>Ditulis pada suatu malam ketika sedang bermain dengan skrip di 49 server</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://riyono.com/2010/08/menyisipkan-blok-debug-pada-skrip-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
