Fungsi-Fungsi Pengolahan Array
Tags: function, php
Published: 2020-08-26 02:27:54

Dalam mengolah atau memanipulasi array adalah hal yang lumrah dalam suatu pemograman. Penggunaan fungsi-fungsi berikut dapat membantu dalam pengolahan array:

## 1. Awal dan Akhir Array
Dalam suatu kumpulan data yang berupa array, sangat penting dalam menentukan `key` awal atau akhir suatu array, array sederhana kita dapat menggunakan index `0` atau `-1`, namun apabilah `key` array telah didefinisikan sebagain entitas, kita akan cukup kebingungan untuk mengambil value dari entitas tersebut. Maka dari itu penggungaan *function* berikut akan cukup membantu:

```php
// fungsi Untuk mencari entitas key array pertama
if (!function_exists('array_key_first')) {
    function array_key_first(array $arr) {
        foreach($arr as $key => $unused) {
            return $key;
        }
        return NULL;
    }
}

// fungsi untuk mencari entitas key array akhir
if (! function_exists("array_key_last")) {
    function array_key_last($array) {
        if (!is_array($array) || empty($array)) {
            return NULL;
        }
        
        $k_array = array_keys($array);
        $c_array = count($array)-1;
        return $k_array[$c_array];
    }
}
```
fungsi diatas `array_key_first` dan `array_key_last` sebenarnya sudah tersedia untuk php versi terbaru, namun alangkah baiknya jika kita mengetahui alur logis dari fungsi-fungsi tersebut.


## 2. Membuat Group Array
Terkadang saya ingin membuat grup baru dari array multidimensi yang telah saya buat, seperti grup berdasarkan chapter atau volume suatu data komik. Nah, fungsi berikut sangat membantu saya dalam pembuatan tersebut:

```php
function group_by($key, $data) {
    $result = array();

    foreach($data as $val) {
        if(array_key_exists($key, $val)){
            $result[$val[$key]][] = $val;
        }else{
            $result[""][] = $val;
        }
    }

    return $result;
}
```
Fungsi diatas membuat array berdasarkan atribut `$key` yang diminta, yang merupakan nama key dari array multidimensi.

## 3. Menemukan key utama
Dalam pemanggilan array key utama array multidimensi sangatlah penting, maka dari itu berikut merupakan fungsi mencari nilai entitas key utama hanya dengan diketahui value dari key turunannya.

```php
function array_search_inner ($array, $attr, $val, $strict = FALSE) {
  // Error is input array is not an array
  if (!is_array($array)) return FALSE;
  // Loop the array
  foreach ($array as $key => $inner) {
    // Error if inner item is not an array (you may want to remove this line)
    if (!is_array($inner)) return FALSE;
    // Skip entries where search key is not present
    if (!isset($inner[$attr])) continue;
    if ($strict) {
      // Strict typing
      if ($inner[$attr] === $val) return $key;
    } else {
      // Loose typing
      if ($inner[$attr] == $val) return $key;
    }
  }
  // We didn't find it
  return NULL;
}
```
Penggunaannya sangat mudah `$array` diisi dengan variabel array yang akan dicari, `$attr` dengan atribut key turunan, `$val` dengan nilai yang diketahui yang merupakan value dari key turunan.

## 4. Mencari *Next* dan *Prev* Array
Kali ini fungsi ini sangat berguna dalam kasus pagination atau button/*link next* dan *prev* suatu halaman atau konten. Tentunya kita dituntut mengetahui key array berikutnya agar dapat membuat *link* yang menuju kesitu. Tentunya dengan beragam pertimbangan betuk `Get` yang kita pakai atau hanya sekedar mendapatkan data *url* nya.

```php
  // fungsi untuk mendapat key array selanjutnya
    function get_next($array, $key) {
    $currentKey = current($array);
    while ($currentKey !== null && $currentKey != $key) {
       next($array);
       $currentKey = current($array);
    }
    return next($array);
    };

  // fungsi untuk mendapat key array sebelumnya
    function get_prev($array, $key) {
    $currentKey = current($array);
    while ($currentKey !== null && $currentKey != $key) {
       next($array);
       $currentKey = current($array);
    }
    return prev($array);
    };
```
Penggunaannya hanya dengan memasukan data `$array` dan data `$key` yang merupakan *current key*.