PHPackages                             phunkie/phunkie - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. phunkie/phunkie

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

phunkie/phunkie
===============

Functional structures library for PHP

1.1.0(3mo ago)23036.4k177MITPHPPHP ^8.2 || ^8.3 || ^8.4 || ^8.5CI passing

Since Mar 23Pushed 3mo ago13 watchersCompare

[ Source](https://github.com/phunkie/phunkie)[ Packagist](https://packagist.org/packages/phunkie/phunkie)[ RSS](/packages/phunkie-phunkie/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (27)Used By (7)

Phunkie
=======

[](#phunkie)

[![CI](https://github.com/phunkie/phunkie/actions/workflows/ci.yml/badge.svg)](https://github.com/phunkie/phunkie/actions)[![Latest Stable Version](https://camo.githubusercontent.com/c73eebd22b97ddd1e6a5502720ded06ef917f50465dfb9ddf8a2d72f3f5879ac/68747470733a2f2f706f7365722e707567782e6f72672f7068756e6b69652f7068756e6b69652f762f737461626c65)](https://packagist.org/packages/phunkie/phunkie)[![Total Downloads](https://camo.githubusercontent.com/33315a92dd9d87c027345e25175467143d217967dea2d5e4fe2362d0f33fa858/68747470733a2f2f706f7365722e707567782e6f72672f7068756e6b69652f7068756e6b69652f646f776e6c6f616473)](https://packagist.org/packages/phunkie/phunkie)[![License](https://camo.githubusercontent.com/e923e244561e58cf102f0eac0804fe8c37563151cf84f6b792d91183e38aecbb/68747470733a2f2f706f7365722e707567782e6f72672f7068756e6b69652f7068756e6b69652f6c6963656e7365)](https://packagist.org/packages/phunkie/phunkie)[![PHP Version](https://camo.githubusercontent.com/8541134578f348aa7c18ffef33c2f8518cdcdc2f9d253c1a1a614e0dad262751/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e32253230253743253743253230253545382e33253230253743253743253230253545382e342d3838393242462e737667)](https://camo.githubusercontent.com/8541134578f348aa7c18ffef33c2f8518cdcdc2f9d253c1a1a614e0dad262751/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e32253230253743253743253230253545382e33253230253743253743253230253545382e342d3838393242462e737667)

Phunkie is a library with functional structures for PHP.

Full documentation is available [here](https://github.com/phunkie/phunkie/blob/master/docs/index.md).

See also our [Coding Style Guide](docs/coding_style.md) for contribution standards.

For better Phunkie development, consider installing [phunkie/console](https://github.com/phunkie/console).

```
$ phunkie
Welcome to phunkie console.

Type in expressions to have them evaluated.

phunkie >
```

Options
-------

[](#options)

```
phunkie > Some(1)
$var0: Option = Some(1)

phunkie > None()
$var1: None = None

phunkie > Option(42)
$var2: Option = Some(42)

phunkie > Option(null)
$var3: None = None

```

Immutable Lists
---------------

[](#immutable-lists)

You can import phunkie modules with the `:import` command. Use `:help` for more information

```
phunkie > ImmList(2,3,4)
$var0: List = List(2, 3, 4)

phunkie > ImmList(Some(1), None(), Some(3))
$var1: List = List(Some(1), None, Some(3))

phunkie > :import immlist/*
imported function \Phunkie\Functions\immlist\head()
imported function \Phunkie\Functions\immlist\init()
imported function \Phunkie\Functions\immlist\tail()
imported function \Phunkie\Functions\immlist\last()
imported function \Phunkie\Functions\immlist\reverse()
imported function \Phunkie\Functions\immlist\length()
imported function \Phunkie\Functions\immlist\concat()
imported function \Phunkie\Functions\immlist\take()
imported function \Phunkie\Functions\immlist\drop()
imported function \Phunkie\Functions\immlist\nth()
imported function \Phunkie\Functions\immlist\filter()
imported function \Phunkie\Functions\immlist\reject()
imported function \Phunkie\Functions\immlist\reduce()

phunkie > head (ImmList(1,2,3))
$var2: Int = 1

phunkie > tail (ImmList(1,2,3))
$var3: List = List(2, 3)

phunkie > init (ImmList(1,2,3))
$var4: List = List(1, 2)

phunkie > last (ImmList(1,2,3))
$var5: Int = 3

phunkie > reverse (ImmList(1,2,3))
$var6: List = List(3, 2, 1)

phunkie > length (ImmList(1,2,3))
$var7: Int = 3

phunkie > ImmList("Black", "Red", "Green")->filter(function($x) { return $x != "Green"; })
$var8: List = List("Black", "Red")

phunkie > ImmList("Black", "Red", "Green")->partition(function($x) { return $x != "Green"; })
$var9: (List, List) = Pair(List("Black", "Red"), List("Green"))

phunkie > ImmList("A","B","C")->zip(ImmList(1,2,3))
$var10: List = List(Pair("A", 1), Pair("B", 2), Pair("C", 3))
```

Immutable Sets and Immutable Maps
---------------------------------

[](#immutable-sets-and-immutable-maps)

```
phunkie > ImmSet(1,2,3)
$var0: Set = Set(1, 2, 3)

phunkie > ImmSet(1,2,3,2) // No duplicates
$var1: Set = Set(1, 2, 3)

phunkie > ImmSet(1,2,3)->contains(3)
$var2: Boolean = true

phunkie > ImmSet(1,2,3)->minus(3) // creates a new set
$var3: Set = Set(1, 2)

phunkie > ImmSet(1,2,3)->plus(4) // again, new set
$var4: Set = Set(1, 2, 3, 4)

phunkie > ImmMap(["hello" => "there"])
$var5: Map = Map("hello" -> "there")

phunkie > ImmMap(["hello" => "there"])->get("hello")
$var6: Option = Some("there")

phunkie > ImmMap(["hello" => "there"])->get("zoom")
$var7: None = None

phunkie > ImmMap(["hello" => "there"])->plus("hi", "here") // creates a new Map
$var8: Map = Map("hello" -> "there", "hi" -> "here")

phunkie > class Id {
phunkie {     private $number;
phunkie {     public function __construct($n)
phunkie {     {
phunkie {         $this->number = $n;
phunkie {     }
phunkie { }
defined class Id

phunkie > ImmMap(
phunkie (   new Id(1), "John Smith",
phunkie (   new Id(2), "Chuck Norris",
phunkie (   new Id(3), "Jack Bauer"
phunkie ( )
$var9: Map = Map(Id@2d05ca0 -> "John Smith", Id@2d05ca1 -> "Chuck Norris", Id@2d05ca2 -> "Jack Bauer")
```

Function1
---------

[](#function1)

```
phunkie > $f = Function1('strlen')
$f : Function1 = Function1(?=>?)

phunkie > $f("hello");
$var0: Int = 5

phunkie > $g = Function1(function($x) { return $x % 2 === 0; })
$g : Function1 = Function1(?=>?)

phunkie > $g($f("hello"))
$var1: Boolean = false

phunkie > $h = $g->compose($f)
$h : Function1 = Function1(?=>?)

phunkie > $h("hello")
$var2: Boolean = false

phunkie > $h = $f->andThen($g)
$h : Function1 = Function1(?=>?)

phunkie > $h("hello")
$var3: Boolean = false
```

Functor
-------

[](#functor)

```
phunkie > Some(1)->map(function($x) { return $x + 1;})
$var0: Option = Some(2)

phunkie > None()->map(function($x) { return $x + 1;})
$var1: None = None

phunkie > ImmList(1,2,3)->map(function($x) { return $x + 1;})
$var2: List = List(2, 3, 4)

phunkie > ImmList(1,2,3)->zipWith(function($x) { return $x + 1;})
$var3: List = List(Pair(1, 2), Pair(2, 3), Pair(3, 4))

phunkie> :import functor/*
Imported function \Phunkie\Functions\functor\fmap()

phunkie > fmap (function($x) { return $x + 1;}, Some(42))
$var4: Option = Some(43)
```

Foldable
--------

[](#foldable)

```
phunkie > ImmList(1,2,3)->foldLeft(0)(function($x, $y) { return $x + $y; })
$var0: Int = 6

phunkie > ImmList("a", "b", "c")->foldLeft("letters:")(function($x, $y) { return $x . $y; })
$var1: String = "letters:abc"

phunkie > ImmList("a", "b", "c")->foldRight("
