Belajar PHP – Menggunakan array_unique

Seri belajar PHP hari ini adalah bagaimana kita menggunakan array_unique pada PHP. Pada kasus tertentu kita mendapatkan data yang berasal baik itu dari database atau user input pada form yang telah kita sediakan, namun memiliki nilai yang duplicate atau bisa disebut sama. Untuk menghindari data yang kita kelola itu duplikat, pada PHP kita bisa menggunakan array_unique ini.

Pada dokumentasi PHP, array unique ini sudah ada pada versi PHP4 dan pada Versi PHP 7 masih bisa kita gunakan lho.

array_unique ini digunakan untuk menghindari duplikat dari nilai sebuah array.

array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

Fungsi array_unique ini juga mengeluarkan nilai yang unique pada array sehingga kita bisa membuat variable baru untuk memisahkan antara variable yang duplikat dengan variable yang sudah unique.

<?php
$input = array(1,2,"1",3,"3","5",5,1);
$result = array_unique($input);
print_r($result);
?>

Hasil dari kode diatas seperti ini.

Array
(
    [0] => 1
    [1] => 2
    [3] => 3
    [5] => 5
)

Bisa kawan-kawan lihat, hasil mengeluarkan nilai yang unique.

Kawan-kawan juga bisa lihat array_unique ini juga bisa membandingkan tipe integer dan string ya. Lalu keluaran dari array_unique ini mengeluarkan key dimana array value itu berasal, maksudnya key 0 => 1, key 1 => 2, key 3 => 3 dan seterusnya. Jadi output tidak selalu berurutan.

array_unique ini belum bisa melakukan proses pada array multiple. Sebagai contoh berikut ini.

<?php
$input = [
    0 => [
        "id" => 1,
        "value" => "nilai 1"
    ],
    1 => [
        "id" => 2,
        "value" => "nilai 2"
    ],
    2 => [
        "id" => 3,
        "value" => "nilai 3"
    ],
    3 => [
        "id" => 4,
        "value" => "nilai 2"
    ]
];

$result = array_unique($input);
var_dump($result);
?>

Jika kawan-kawan menjalankan kode berikut, akan muncul error seperti ini.

<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
<br />
<b>Notice</b>:  Array to string conversion in <b>[...][...]</b> on line <b>21</b><br />
array(1) {
  [0]=>
  array(2) {
    ["id"]=>
    int(1)
    ["value"]=>
    string(7) "nilai 1"
  }
}

Error tersebut karena array_unique berusaha untuk mengkonversi nilai array menjadi sebuah string namun ternyata nilai adalah array. Sehingga muncullah error seperti itu.

Lalu bagaimana cara agar value “nilai 2” ini tidak duplikat?

Ada beberapa cara, salah satunya kita gunakan array_column sehingga menjadi seperti berikut ini.

<?php
$input = [
    0 => [
        "id" => 1,
        "value" => "nilai 1"
    ],
    1 => [
        "id" => 2,
        "value" => "nilai 2"
    ],
    2 => [
        "id" => 3,
        "value" => "nilai 3"
    ],
    3 => [
        "id" => 4,
        "value" => "nilai 2"
    ]
];

$result = array_unique(array_column($input, 'value'));
var_dump($result);
?>

keluaran akan menjadi seperti berikut:

array(3) {
  [0]=>
  string(7) "nilai 1"
  [1]=>
  string(7) "nilai 2"
  [2]=>
  string(7) "nilai 3"
}

Sesuai dengan yang kita mau ya, karena fungsi array_column adalah mengambil multiple array menjadi satu array dengan menginputkan key yang ingin dikeluarkan. Jika kawan-kawan mencoba tanpa array_unique akan seperti ini.

<?php
$input = [
    0 => [
        "id" => 1,
        "value" => "nilai 1"
    ],
    1 => [
        "id" => 2,
        "value" => "nilai 2"
    ],
    2 => [
        "id" => 3,
        "value" => "nilai 3"
    ],
    3 => [
        "id" => 4,
        "value" => "nilai 2"
    ]
];

$result = array_column($input, 'value');
var_dump($result);
?>

// result
array(4) {
  [0]=>
  string(7) "nilai 1"
  [1]=>
  string(7) "nilai 2"
  [2]=>
  string(7) "nilai 3"
  [3]=>
  string(7) "nilai 2"
}

Sampai disini, mudah-mudahan bermanfaat untuk seri belajar php array unique 😉

 

 

Fitur Baru Laravel 5.7: Symfony Dump Server

Belum lama dapat info kalau Laravel sudah update versi lagi dari yang 5.6 ke versi terbaru adalah 5.7. Beberapa programmer ada yang senang, ada juga yang mungkin dan sangat banyak saya lihat di group baik itu group facebook dan group telegram yang mengatakan kurang lebih “Baru belajar 5.5, udah keluar lagi 5.7” dan banyak tipe programmer yang tidak seneng melihat perubahan yang cepat pada Laravel ini.

Continue reading Fitur Baru Laravel 5.7: Symfony Dump Server

PHPUnit : Cara Mengambil Value Dari Hasil Test Fungsi Lain

PHPUnit salah satu tool yang menarik untuk dipelajari terutama untuk kita yang ingin project atau aplikasi kita bebas dari bug. Mungkin ada beberapa kita pernah dengar istilah TDD, Test Driven Development? Atau mungkin pernah mendengar Continuous Integration? Nah dari sini mulai belajar bagaimana code yang kita buat itu sebelumnya harus menjalankan unit testing sehingga kedepan aplikasi kita lancar walaupun ada panambahan fitur baru. Continue reading PHPUnit : Cara Mengambil Value Dari Hasil Test Fungsi Lain

Cara memunculkan gambar dari URL SSL yang tidak muncul

Awalnya ada issue gambar tidak muncul saat membuat PDF yang ada gambarnya. Dahulu sebelum server belum dikasih SSL gambar masih bisa muncul. Tapi setelah server dikasih SSL, tim android pun kalang kabut bingung kenapa gambar tidak muncul.

Seperti yang diketahui, SSL itu mengubah data agar terenkripsi. Jadi misalnya ada proses perpindahan data dari A ke B, maka data dienkripsi agar saat proses perpindahan tidak terlihat. Mungkin karena itu data gambar tidak muncul.

Seperti yang biasa kita lakukan, kita selipkan gambar di tag html IMG dengan attribute SRC. Namun cara itu tidak serta merta lancar. Setelah cara informasi, ada cara agar saat menaruhnya di SRC mesti diconvert terlebih dahulu ke base64. Lalu dari format base64 ini kita panggil gambar base64 ini di SRC.

Di PHP, cara convert gambar dari SSL itu dengan cara berikut:

$secureUrl = 'https://domain.com/nama_gambar.png';
$sslContextOptions=array(
                "ssl"=>array(
                    "verify_peer"=>false,
                    "verify_peer_name"=>false,
                ),
            );
$type = pathinfo($secureUrl, PATHINFO_EXTENSION);
$imageData = file_get_contents($secureUrl, false, stream_context_create($sslContextOptions));
$imageBase64Data = base64_encode($imageData);
$srcData = 'data:image/' . $type . ';base64,' . $imageBase64Data;

echo "<img src='" . $srcData . "' />";

Dengan cara ini, gambar yang tadinya tidak muncul setelah saya coba berhasil muncul 🙂

Apache dan PHP Tidak Nyambung

Belum lama ini saya 2 kali ketemu masalah ini, sepertinya antara Apache dan PHP tidak nyambung. Saya tidak begitu paham dengan konfigurasi devops server dan lainnya. Cuma kejadian ini seperti mistis. Ada yang salah ketik command atau sengaja ngerubah config?

Kejadian #1

Kejadian pertama, apache dan php seperti tidak nyambung. Ketika saya akses domain misalnya domain.id, itu mengeluarkan file php namun seperti tidak dieksekusi oleh si PHP. Path sudah benar, Virtualhost pun sudah nyatu, tapi kenapa PHP tidak meng-eksekusi file php seperti biasa, dia (PHP) seperti tidak nyambung dan mengeluarkan kode php yang benar-benar tidak di eksekusi.

Jadi misalnya di dalam file PHP tersebut saya tulis “echo ‘adiputra’;”, maka si apache mengeluarkan mentahan “echo ‘adiputra’;”. Seharusnya kan hanya “adiputra” saja. Dengan asumsi tersebut “PHP dan Apache tidak nyambung”, saya diketemukan dengan stackoverflow berikut:

https://askubuntu.com/questions/451708/php-script-not-executing-on-apache-server

Setelah coba-coba akhirnya nyambung juga.

Saya coba satu persatu jalankan command.

Install:

sudo apt-get install apache2 php7.0 libapache2-mod-php7.0

Kode ini mendownload libapache2-mod-php7.0. dan anehnya ini ke-download lho, kok bisa hilang ya? haduh..

Verify:

a2query -m php7.0

Kode ini seperti mengecek, apakah mod library apache sudah sesuai dengan apache dan php yang telah terinstall. Pada kondisi ini, kemarin saya lihat bahwa mod library sudah cocok.

Load:

sudo a2enmod php7.0

Ketika sudah cocok, kita paksa apache untuk mengaktifkan mod php7.0. Dan lagi-lagi ini berhasil, (aneh, padahal dulu-dulu gak seperti ini, jalan mulus seperti biasa)

Setelah itu saya restart apachenya, dan nyambung lagi.. (ebuset, kok pada ilang gini)

Kejadian #2

Kejadian kedua ini mirip-mirip kaya kejadian #1, lebih parah lagi karena apache bener-bener mati dan seperti tidak terinstall. Ketika ketik perintah “service apache2 start” keluar bacaan “apache2 service not found“. #ebuset apalagi ini

Setelah cek sites-available apachenya, lebih ngeri lagi, ini config virtualhost terhapus semua. #luarbiasaini

Anehnya folder proyek (www/html) tidak dihapus, masih ada aman.

Saya coba cek history command, takut ada yang sengaja remove apachenya. Saya cek ternyata history tidak keliatan, hanya beberapa command yang terlihat. Penasaran tidak ketemu siapa yang menghapus atau kenapa ini terhapus, akhirnya saya install fresh kembali apache2 nya karena ada tim lain yang sedang mengecek aplikasi.

Setelah berhasil install apache2, penyakit di kejadian #1 muncul. Gak konek lagi. Bedanya adalah mod php 7.0 masih ada, ini gak ke uninstall. Jadi tinggal verify aja lalu load mod php7.0 nya.

Setelah load mod php7.0, ada notif yang baru saya lihat.

“Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.”

“Asik ketemu error lagi :)”,

gak enaknya ketemu error disaat orang lain sedang pakai atau cek. Apalagi jika klien atau atasan lagi cek juga.

Ilmu ask to google aja, copy error, dan tada..ada stackoverflow yang bantu:

https://askubuntu.com/questions/760787/php-rendered-as-text-after-ubuntu-16-04-upgrade

Baik kita coba jalankan satu-satu:

a2enmod php7.0

untuk menambahkan mod php7.0 ke apache.

Saya jalankan namun tidak berhasil. Lalu saya coba petunjuknya lagi.

The installation should switch from event MPM to prefork MPM automatically, but if it doesn’t, you can switch it manually by doing sudo a2dismod mpm_event followed by sudo a2enmod mpm_prefork

Baiklah, kita coba dan alhamdulillah berhasil.

Solving masalah kelar. Cuma keanehan kok bisa hilang apache dan config virtualhostnya masih jadi pertanyaan.

Membuat Menu Bertingkat Dengan 1 Query

Sebelumnya saya membuat artikel cara membuat menu bertingkat. Pada artikel sebelumnya bisa dilihat, saya melakukan query di dalam looping dan ini tidak efesien. Apalagi jika menu ini kita panggil dengan API, makin lambat lagi.

Continue reading Membuat Menu Bertingkat Dengan 1 Query

PHP: Panggil method Trait A pada Trait B

Trait, salah satu fitur yang membuat kode kita menjadi lebih reusable. Kita tidak perlu banyak menuliskan kode di tiap process. Cukup buat satu kode, lalu include saja. Selain itu, Trait bisa memanggil method dari class yang memakainya. Jadi misalnya kita buat Trait seperti ini.
Continue reading PHP: Panggil method Trait A pada Trait B

Laravel: Akses banyak database dalam satu application

Kadang, kita membutuhkan untuk memisahkan satu data dalam database ke database lain. Kasus sederhana adalah penyimpanan log akses user. Karena log akses user data terlalu banyak dan kurang begitu penting (hanya pada kasus tertentu kita perlu data log ini) maka baiknya memisahkan log akses user dengan database lain.
Continue reading Laravel: Akses banyak database dalam satu application

Generate PDF dengan MPDF: Fatal Error Allowed Memory Size

Salah satu teman bingung ketika proses pembuatan PDF selalu gagal dengan mpdf. Awalnya berjalan lancar, tapi katanya tidak pernah ubah-ubah code generate PDF nya tapi malah hasil PDF gagal didapat. Saya bilang, coba baca error log nya. Dia bilang fatal error “Fatal Error: Allowed Memory Size of xxxx Bytes Exhausted”.

Saya suruh untuk naikin settingan memory di php.ini namun karena ditaro dihosting langkah ini gak bisa dijalanin. Saya coba lihat code generate PDF nya untuk cek dimana errornya. Biasa tag html dan css serta font yang bermasalah jika generate PDF via html. Dan ternyata bener. Ketika img tag dihapus, proses generate berhasil dijalankan.

Permasalahan ada di tag image, saya coba ganti menjadi full path, tetep error muncul. Saya coba ganti dengan gambar yang lain. Ternyata bisa. Berarti gambar yang diselipkan di tag img terlalu besar.
Setelah dikecilkan, proses generate PDF dengan MPDF berjalan lancar kembali.

Membuat menu dinamis bertingkat dengan cara parent_id sebagai key

Ada beberapa programmer yang kesulitan ketika membuat menu bertinggal secara dinamis. Untuk membuat menu bertingkat dinamis ini dengan cara parent_id sebagai key cukup mudah. Berikut saya coba catet caranya:
Continue reading Membuat menu dinamis bertingkat dengan cara parent_id sebagai key

Solusi Error Cannot Adopt OID in xxx-SNMP-xxx

Belum lama coba install composer di komputer lama yang masih terinstall ubuntu 14.04. Setelah di update dan menginstall composer dengan perintah

curl -sS https://getcomposer.org/installer | sudo php — –install-dir=/usr/local/bin –filename=composer Continue reading Solusi Error Cannot Adopt OID in xxx-SNMP-xxx

Laravel: Service Injection yang bisa dipanggil di semua View

Berawal dari permintaan salah satu kawan, “bisa tidak Di, kita panggil langsung nama fungsi dari service injection ini, jadi ga perlu @inject-@inject lagi di tiap view?”. Penasaran, saya baca-baca lagi documentasi si laravel 😀 tapi ga ketemu hahahaha.

Awalnya inget salah satu artikel yang saya buat dulu ini [Membuat variable yang bisa diakses di semua view pada Laravel] lalu saya coba implement si service injection tapi yang keluar hanya sebuah variable bukan sebuah class. Saya sempet posting di group laravel indonesia tapi ga ada yang jawaban :(. Dan akhirnya ketemu juga. Continue reading Laravel: Service Injection yang bisa dipanggil di semua View