Trik Pemrograman Penggunaan array_map

written by Arief Bayu Purwanto on March 26, 2012 in Tips N Trick with one Comment

Free Image Hosting at www.ImageShack.us

Hai, lama juga ya ndak nulis teknis di blog ini. Beberapa minggu ini saya cukup sibuk dengan kegiatan yang sangat jauh dari ngoding. Untuk refreshing, saya mau coba menggali beberapa trik pemrograman yang berhubungan dengan array dan penggunaan array_map.

Memfilter form input

Trik yang satu ini terhitung cukup sederhana. Biasanya, untuk membersihkan form, kita melakukan stripslashes terlebih dahulu:

$nama = stripslashes($_POST['nama']);
$alamat = stripslashes($_POST['alamat']);

Daripada harus memanggil terus-menerus, kita bisa memanggilnya sekali seperti ini:

$_POST = array_map('stripslashes', $_POST);

Berikutnya tinggal memanggil element array $_POST sesuai kebutuhan.

Menghilangkan duplikasi array pada array multidimensi

Perhatikan contoh array berikut:

$data = array(
	array('satu', 'tiga', 'satu', 'lima'),
	array('nana', 'nina', 'nunung', 'nunung'),
	array('batu', 'malang', 'malang', 'surabaya'),
);

Untuk menghilangkan duplikasi dari array di atas, bisa dengan cara:

<?php
foreach($data as $k => $v){
	$data[$k] = array_unique($v);
}
?>

Tapi bisa juga menjadi satu baris, dengan menggunakan array_map:

$data = array_map('array_unique', $data);

Mengatur ulang array multidimensi

Kasus satu ini sedikit lebih rumit. Coba perhatikan contoh array yang ada:

$transaksi = array(
	array(2123, 3437, 5234, 2351, 3242, 8452),
	array('Si Kancil Yang Sombong', 'Cinderela', 'Gadis Berkerudung Merah', 'Tumbelina', 'Harry Potter', 'Semut Kecil Yang Cerdik'),
	array(17500, 19900, 12000, 9800, 48900, 17500),
);

Data di atas merupakan contoh array data transaksi yang terdiri dari tiga elemen yang masing-masing berupa array. Elemen pertama berupa id buku, yang kedua adalah judul buku, dan ketiga merupakan harga buku tersebut.

Sekarang kita akan mengubah struktur array tersebut menjadi:

$transaksi = array(
	array(
		'id' => 2123,
		'judul' => 'Si Kancil Yang Sombong',
		'harga' => 17500
	),
	.
	.
	.
);

Bagaimana caranya? Cukup sederhana:

//proses pertama
$tmpTransaksi = array_map(null, $transaksi[0], $transaksi[1], $transaksi[2] );

//proses kedua
$tmpTransaksi = array_map(function($array){
	return array(
		'id' => $array[0],
		'judul' => $array[1],
		'harga' => $array[2],
	);
});

Penjelasannya adalah:

Pertama, dengan memberikan callback berupa null, kita membuat array baru yang isinya merupakan masing2 elemen dari sub array transaksi. Cukup sulit juga menjelaskan dengan kata-kata. Perhatikan saja array berikut yang merupakan hasil dari proses pertama:

Array
(
    [0] => Array
        (
            [0] => 2123
            [1] => Si Kancil Yang Sombong
            [2] => 17500
        )

    [1] => Array
        (
            [0] => 3437
            [1] => Cinderela
            [2] => 19900
        )

    [2] => Array
        (
            [0] => 5234
            [1] => Gadis Berkerudung Merah
            [2] => 12000
        )

    [3] => Array
        (
            [0] => 2351
            [1] => Tumbelina
            [2] => 9800
        )

    [4] => Array
        (
            [0] => 3242
            [1] => Harry Potter
            [2] => 48900
        )

    [5] => Array
        (
            [0] => 8452
            [1] => Semut Kecil Yang Cerdik
            [2] => 17500
        )

)

Sejatinya, pada proses ini kita sudah mendapatkan array yang dibutuhkan. Tapi, karena requirementnya adalah key dari array berupa string yang merepresentasikan isi, maka proses kedua perlu dilakukan. Hasilnya seperti ini:

Array
(
    [0] => Array
        (
            [id] => 2123
            [judul] => Si Kancil Yang Sombong
            [harga] => 17500
        )

    [1] => Array
        (
            [id] => 3437
            [judul] => Cinderela
            [harga] => 19900
        )

    [2] => Array
        (
            [id] => 5234
            [judul] => Gadis Berkerudung Merah
            [harga] => 12000
        )

    [3] => Array
        (
            [id] => 2351
            [judul] => Tumbelina
            [harga] => 9800
        )

    [4] => Array
        (
            [id] => 3242
            [judul] => Harry Potter
            [harga] => 48900
        )

    [5] => Array
        (
            [id] => 8452
            [judul] => Semut Kecil Yang Cerdik
            [harga] => 17500
        )

)

Penutup

Bagaimana? cukup menyenangkan sekali bukan, kalau kita mengerti cara penggunaan function2 yang ada di PHP?