PHP
merupakan bahasa pemrograman script server-side
yang didesain untuk pengembangan web.
Pertama kali di kembangkan oleh Rasmust Lerdorf
pada tahun 1995, dan sekarang php dikembangkan oleh The PHP Group
.
PHP merupakan singkatan dari Personal Home Page
, dengan tujuan awal digunakan untuk membuat website pribadi. Dalam beberapa tahun perkembangannya, PHP menjelma menjadi bahasa pemrograman web yang populer dan tidak hanya digunakan untuk membuat halaman web sederhana, tetapi juga website populer yang digunakan oleh jutaan orang seperti wikipedia, wordpress, joomla, dll.
String
1. EndsWith
Periksa apakah string diakhiri dengan substring yang diberikan.
function endsWith($haystack, $needle)
{
return strrpos($haystack, $needle) === (strlen($haystack) - strlen($needle));
}
Contoh
endsWith('Hi, this is me', 'me'); // true
2. FirstStringBetween
Mengembalikan string pertama yang ada di antara string dari awal dan akhir parameter.
function firstStringBetween($haystack, $start, $end)
{
return trim(strstr(strstr($haystack, $start), $end, true), $start . $end);
}
Contoh
firstStringBetween('This is a [custom] string', '[', ']'); // custom
3. IsAnagram
Bandingkan dua string dan mengembalikan true
jika kedua string adalah anagram
, false
sebaliknya.
function isAnagram($string1, $string2)
{
return count_chars($string1, 1) === count_chars($string2, 1);
}
Contoh
isAnagram('act', 'cat'); // true
4. IsLowerCase
Mengembalikan nilai true
jika string yang diberikan adalah huruf kecil, salah jika sebaliknya.
function isLowerCase($string)
{
return $string === strtolower($string);
}
Contoh
isLowerCase('Morning shows the day!'); // false
isLowerCase('hello'); // true
5. IsUpperCase
Mengembalikan nilai true
jika string yang diberikan adalah huruf besar, false
jika sebaliknya.
function isUpperCase($string)
{
return $string === strtoupper($string);
}
Contoh
isUpperCase('MORNING SHOWS THE DAY!'); // true
isUpperCase('qUick Fox'); // false
6. Palindrome
Mengembalikan nilai true
jika string yang diberikan adalah palindrome
, false
jika tidak.
function palindrome($string)
{
return strrev($string) === (string) $string;
}
Contoh
palindrome('racecar'); // true
palindrome(2221222); // true
7. StartsWith
Periksa apakah string dimulai dengan substring
yang diberikan.
function startsWith($haystack, $needle)
{
return strpos($haystack, $needle) === 0;
}
Contoh
startsWith('Hi, this is me', 'Hi'); // true
8. CountVowels
Mengembalikan jumlah vokal dalam string yang disediakan.
Gunakan ekspresi reguler untuk menghitung jumlah vokal (A, E, I, O, U)
dalam sebuah string.
function countVowels($string)
{
preg_match_all('/[aeiou]/i', $string, $matches);
return count($matches[0]);
}
Contoh
countVowels('sampleInput'); // 4
9. Decapitalize
Memenggal kepala huruf pertama dari sebuah string.
Memenggal kepala huruf pertama dari string dan kemudian menambahkannya dengan sisa string. Hapus parameter upperRest
untuk menjaga string tetap utuh, atau atur menjadi true
untuk dikonversi menjadi huruf besar.
function decapitalize($string, $upperRest = false)
{
return lcfirst($upperRest ? strtoupper($string) : $string);
}
Contoh
decapitalize('FooBar'); // 'fooBar'
10. IsContains
Periksa apakah ada kata / substring
dalam input string yang diberikan. Menggunakan strpos
untuk menemukan posisi kemunculan pertama sebuah substring
dalam sebuah string. Mengembalikan nilai true
atau false
function isContains($string, $needle)
{
return strpos($string, $needle) === false ? false : true;
}
Contoh
isContains('This is an example string', 'example'); // true
isContains('This is an example string', 'hello'); // false
Function
1. Compose
Kembalikan fungsi baru yang menyusun beberapa fungsi menjadi satu yang bisa dipanggil.
function compose(...$functions)
{
return array_reduce(
$functions,
function ($carry, $function) {
return function ($x) use ($carry, $function) {
return $function($carry($x));
};
},
function ($x) {
return $x;
}
);
}
Contoh
$compose = compose(
// add 2
function ($x) {
return $x + 2;
},
// multiply 4
function ($x) {
return $x * 4;
}
);
$compose(3); // 20
2. Memoize
Memoisasi suatu fungsi menghasilkan memori.
function memoize($func)
{
return function () use ($func) {
static $cache = [];
$args = func_get_args();
$key = serialize($args);
$cached = true;
if (!isset($cache[$key])) {
$cache[$key] = $func(...$args);
$cached = false;
}
return ['result' => $cache[$key], 'cached' => $cached];
};
}
Contoh
$memoizedAdd = memoize(
function ($num) {
return $num + 10;
}
);
var_dump($memoizedAdd(5)); // ['result' => 15, 'cached' => false]
var_dump($memoizedAdd(6)); // ['result' => 16, 'cached' => false]
var_dump($memoizedAdd(5)); // ['result' => 15, 'cached' => true]
3. Curry
Curry suatu fungsi untuk mengambil argumen dalam beberapa panggilan.
function curry($function)
{
$accumulator = function ($arguments) use ($function, &$accumulator) {
return function (...$args) use ($function, $arguments, $accumulator) {
$arguments = array_merge($arguments, $args);
$reflection = new ReflectionFunction($function);
$totalArguments = $reflection->getNumberOfRequiredParameters();
if ($totalArguments <= count($arguments)) {
return $function(...$arguments);
}
return $accumulator($arguments);
};
};
return $accumulator([]);
}
Contoh
$curriedAdd = curry(
function ($a, $b) {
return $a + $b;
}
);
$add10 = $curriedAdd(10);
var_dump($add10(15)); // 25
4. Once
Panggil fungsi hanya sekali.
function once($function)
{
return function (...$args) use ($function) {
static $called = false;
if ($called) {
return;
}
$called = true;
return $function(...$args);
};
}
Contoh
$add = function ($a, $b) {
return $a + $b;
};
$once = once($add);
var_dump($once(10, 5)); // 15
var_dump($once(20, 10)); // null
5. VariadicFunction
Fungsi variadik memungkinkan Anda untuk menangkap sejumlah variabel argumen ke suatu fungsi. Fungsi menerima sejumlah variabel untuk mengeksekusi kode. Ini menggunakan for loop untuk beralih pada parameter.
function variadicFunction($operands)
{
$sum = 0;
foreach($operands as $singleOperand) {
$sum += $singleOperand;
}
return $sum;
}
Contoh
variadicFunction([1, 2]); // 3
variadicFunction([1, 2, 3, 4]); // 10
Math
1. Average
Mengembalikan rata-rata dua angka atau lebih.
function average(...$items)
{
$count = count($items);
return $count === 0 ? 0 : array_sum($items) / $count;
}
Contoh
average(1, 2, 3); // 2
2. Factorial
Menghitung faktorial angka.
function factorial($n)
{
if ($n <= 1) {
return 1;
}
return $n * factorial($n - 1);
}
Contoh
factorial(6); // 720
3. Fibonacci
Menghasilkan array, berisi deret Fibonacci, hingga istilah ke-n.
function fibonacci($n)
{
$sequence = [0, 1];
for ($i = 2; $i < $n; $i++) {
$sequence[$i] = $sequence[$i-1] + $sequence[$i-2];
}
return $sequence;
}
Contoh
fibonacci(6); // [0, 1, 1, 2, 3, 5]
4. Gcd
Menghitung pembagi umum terbesar antara dua atau lebih angka.
function gcd(...$numbers)
{
if (count($numbers) > 2) {
return array_reduce($numbers, 'gcd');
}
$r = $numbers[0] % $numbers[1];
return $r === 0 ? abs($numbers[1]) : gcd($numbers[1], $r);
}
Contoh
gcd(8, 36); // 4
gcd(12, 8, 32); // 4
5. IsEven
Mengembalikan nilai true jika angka yang diberikan genap, false jika tidak.
function isEven($number)
{
return ($number % 2) === 0;
}
Contoh
isEven(4); // true
6. IsPrime
Cek apakah bilangan bulat yang disediakan adalah bilangan prima.
function isPrime($number)
{
$boundary = floor(sqrt($number));
for ($i = 2; $i <= $boundary; $i++) {
if ($number % $i === 0) {
return false;
}
}
return $number >= 2;
}
Contoh
isPrime(3); // true
7. Lcm
Menghasilkan kelipatan paling umum dari dua atau lebih angka.
function lcm(...$numbers)
{
$ans = $numbers[0];
for ($i = 1, $max = count($numbers); $i < $max; $i++) {
$ans = (($numbers[$i] * $ans) / gcd($numbers[$i], $ans));
}
return $ans;
}
Contoh
lcm(12, 7); // 84
lcm(1, 3, 4, 5); // 60
8. Median
Mengembalikan median array angka.
function median($numbers)
{
sort($numbers);
$totalNumbers = count($numbers);
$mid = floor($totalNumbers / 2);
return ($totalNumbers % 2) === 0 ? ($numbers[$mid - 1] + $numbers[$mid]) / 2 : $numbers[$mid];
}
Contoh
median([1, 3, 3, 6, 7, 8, 9]); // 6
median([1, 2, 3, 6, 7, 9]); // 4.5
9. MaxN
Mengembalikan n elemen maksimum dari array yang disediakan.
function maxN($numbers)
{
$maxValue = max($numbers);
$maxValueArray = array_filter($numbers, function ($value) use ($maxValue) {
return $maxValue === $value;
});
return count($maxValueArray);
}
Contoh
maxN([1, 2, 3, 4, 5, 5]); // 2
maxN([1, 2, 3, 4, 5]); // 1
10. MinN
Mengembalikan n elemen minimum dari array yang disediakan.
function minN($numbers)
{
$minValue = min($numbers);
$minValueArray = array_filter($numbers, function ($value) use ($minValue) {
return $minValue === $value;
});
return count($minValueArray);
}
Contoh
minN([1, 1, 2, 3, 4, 5, 5]); // 2
minN([1, 2, 3, 4, 5]); // 1
11. ApproximatelyEqual
Memeriksa apakah dua angka kira-kira sama satu sama lain. Gunakan abs() untuk membandingkan perbedaan absolut dari kedua nilai tersebut dengan epsilon. Hapus parameter ketiga, epsilon, untuk menggunakan nilai default 0,001.
function approximatelyEqual($number1, $number2, $epsilon = 0.001)
{
return abs($number1 - $number2) < $epsilon;
}
Contoh
approximatelyEqual(10.0, 10.00001); // true
approximatelyEqual(10.0, 10.01); // false
12. ClampNumber
Clamps num dalam rentang inklusif yang ditentukan oleh nilai batas a dan b. Jika num berada dalam kisaran, kembalikan num. Jika tidak, kembalikan nomor terdekat dalam kisaran.
function clampNumber($num, $a, $b)
{
return max(min($num, max($a, $b)), min($a, $b));
}
Contoh
clampNumber(2, 3, 5); // 3
clampNumber(1, -1, -5); // -1
Array
1. All
Mengembalikan nilai true jika fungsi yang disediakan mengembalikan nilai true untuk semua elemen array, salah jika tidak.
function all($items, $func)
{
return count(array_filter($items, $func)) === count($items);
}
Contoh
all([2, 3, 4, 5], function ($item) {
return $item > 1;
}); // true
2. Any
Mengembalikan nilai true jika fungsi yang disediakan mengembalikan nilai true untuk setidaknya satu elemen dari array, false jika tidak.
function any($items, $func)
{
return count(array_filter($items, $func)) > 0;
}
Contoh
any([1, 2, 3, 4], function ($item) {
return $item < 2;
}); // true
3. DeepFlatten
Deep meratakan array.
function deepFlatten($items)
{
$result = [];
foreach ($items as $item) {
if (!is_array($item)) {
$result[] = $item;
} else {
$result = array_merge($result, deepFlatten($item));
}
}
return $result;
}
Contoh
deepFlatten([1, [2], [[3], 4], 5]); // [1, 2, 3, 4, 5]
4. Drop
Mengembalikan array baru dengan n elemen dihapus dari kiri.
function drop($items, $n = 1)
{
return array_slice($items, $n);
}
Contoh
drop([1, 2, 3]); // [2,3]
drop([1, 2, 3], 2); // [3]
5. FindLast
Mengembalikan elemen terakhir yang fungsi yang disediakan mengembalikan nilai kebenaran.
function findLast($items, $func)
{
$filteredItems = array_filter($items, $func);
return array_pop($filteredItems);
}
Contoh
findLast([1, 2, 3, 4], function ($n) {
return ($n % 2) === 1;
});
// 3
6. FindLastIndex
Mengembalikan indeks elemen terakhir yang fungsi yang disediakan mengembalikan nilai sebenarnya.
function findLastIndex($items, $func)
{
$keys = array_keys(array_filter($items, $func));
return array_pop($keys);
}
Contoh
findLastIndex([1, 2, 3, 4], function ($n) {
return ($n % 2) === 1;
});
// 2
7. Flatten
Ratakan array hingga kedalaman satu tingkat.
function flatten($items)
{
$result = [];
foreach ($items as $item) {
if (!is_array($item)) {
$result[] = $item;
} else {
$result = array_merge($result, array_values($item));
}
}
return $result;
}
Contoh
flatten([1, [2], 3, 4]); // [1, 2, 3, 4]
8. GroupBy
Mengelompokkan elemen-elemen dari array berdasarkan fungsi yang diberikan.
function groupBy($items, $func)
{
$group = [];
foreach ($items as $item) {
if ((!is_string($func) && is_callable($func)) || function_exists($func)) {
$key = call_user_func($func, $item);
$group[$key][] = $item;
} elseif (is_object($item)) {
$group[$item->{$func}][] = $item;
} elseif (isset($item[$func])) {
$group[$item[$func]][] = $item;
}
}
return $group;
}
Contoh
groupBy(['one', 'two', 'three'], 'strlen'); // [3 => ['one', 'two'], 5 => ['three']]
9. HasDuplicates
Periksa daftar datar untuk nilai duplikat. Mengembalikan nilai true jika nilai duplikat ada dan false jika nilai semuanya unik.
function hasDuplicates($items)
{
return count($items) > count(array_unique($items));
}
Contoh
hasDuplicates([1, 2, 3, 4, 5, 5]); // true
10. Head
Mengembalikan kepala daftar.
function head($items)
{
return reset($items);
}
Contoh
head([1, 2, 3]); // 1
11. Last
Mengembalikan elemen terakhir dalam array.
function last($items)
{
return end($items);
}
Contoh
last([1, 2, 3]); // 3
12. Pluck
Mengambil kembali semua nilai untuk kunci yang diberikan:
function pluck($items, $key)
{
return array_map( function($item) use ($key) {
return is_object($item) ? $item->$key : $item[$key];
}, $items);
}
Contoh
pluck([
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
], 'name');
// ['Desk', 'Chair']
13. Pull
Memotong array asli untuk memfilter nilai yang ditentukan.
function pull(&$items, ...$params)
{
$items = array_values(array_diff($items, $params));
return $items;
}
Contoh
$items = ['a', 'b', 'c', 'a', 'b', 'c'];
pull($items, 'a', 'c'); // $items will be ['b', 'b']
14. Reject
Memfilter koleksi menggunakan callback yang diberikan.
function reject($items, $func)
{
return array_values(array_diff($items, array_filter($items, $func)));
}
Contoh
reject(['Apple', 'Pear', 'Kiwi', 'Banana'], function ($item) {
return strlen($item) > 4;
}); // ['Pear', 'Kiwi']
15. Remove
Menghapus elemen dari array yang fungsi yang dikembalikan salah.
function remove($items, $func)
{
$filtered = array_filter($items, $func);
return array_diff_key($items, $filtered);
}
Contoh
remove([1, 2, 3, 4], function ($n) {
return ($n % 2) === 0;
});
// [0 => 1, 2 => 3]
16. Tail
Mengembalikan semua elemen dalam array kecuali yang pertama.
function tail($items)
{
return count($items) > 1 ? array_slice($items, 1) : $items;
}
Contoh
tail([1, 2, 3]); // [2, 3]
17. Take
Mengembalikan array dengan n elemen yang dihapus dari awal.
function take($items, $n = 1)
{
return array_slice($items, 0, $n);
}
Contoh
take([1, 2, 3], 5); // [1, 2, 3]
take([1, 2, 3, 4, 5], 2); // [1, 2]
18. Without
Menyaring elemen array, yang memiliki salah satu dari nilai yang ditentukan.
function without($items, ...$params)
{
return array_values(array_diff($items, $params));
}
Contoh
without([2, 1, 2, 3], 1, 2); // [3]
19. OrderBy
Mengurutkan koleksi array atau objek dengan kunci.
function orderBy($items, $attr, $order)
{
$sortedItems = [];
foreach ($items as $item) {
$key = is_object($item) ? $item->{$attr} : $item[$attr];
$sortedItems[$key] = $item;
}
if ($order === 'desc') {
krsort($sortedItems);
} else {
ksort($sortedItems);
}
return array_values($sortedItems);
}
Contoh
orderBy(
[
['id' => 2, 'name' => 'Joy'],
['id' => 3, 'name' => 'Khaja'],
['id' => 1, 'name' => 'Raja']
],
'id',
'desc'
); // [['id' => 3, 'name' => 'Khaja'], ['id' => 2, 'name' => 'Joy'], ['id' => 1, 'name' => 'Raja']]
20. BubbleSort
Mengurutkan array menggunakan algoritma semacam Bubble. Algoritma pengurutan ini adalah algoritma berbasis perbandingan di mana setiap pasangan elemen yang berdekatan dibandingkan dan elemen-elemen ditukar jika mereka tidak berurutan.
function bubbleSort($array) {
$array = array_unique($array);
$arrayLength = count($array);
for ($i = 0; $i < $arrayLength - 1; $i++) {
$swapped = false;
for ($j = 0; $j < $arrayLength - 1 - $i; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
$swapped = true;
}
}
if (!$swapped) {
break;
}
}
return $array;
}
Contoh
bubbleSort([44, 11, 7, 20, 12, 90, 35, 5]); // [5,7,11,12,20,35,44,90]
21. Rotate
Memutar array (dalam arah kiri) dengan jumlah shift. Diberikan indeks $shift, itu menggabungkan nilai array setelah $ shift dengan nilai sebelum $ shift.
function rotate($array, $shift = 1)
{
for ($i = 0; $i < $shift; $i++) {
array_push($array, array_shift($array));
}
return $array;
}
Contoh
rotate([1, 3, 5, 2, 4]); // [3, 5, 2, 4, 1]
rotate([1, 3, 5, 2, 4], 2); // [5, 2, 4, 1, 3]