Completed
Push — master ( fb9863...65915f )
by Owen
02:13
created

Collection::fromCollection()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Mundanity\Collection;
4
5
6
/**
7
 * Implements a basic collection from an array.
8
 *
9
 */
10
class Collection implements CollectionInterface
11
{
12
    /**
13
     * The data in the collection.
14
     *
15
     * @var array
16
     *
17
     */
18
    protected $data = [];
19
20
21
    /**
22
     * Constructor
23
     *
24
     * @param array $data
25
     *   An array of data to populate the collection with. Note that existing
26
     *   indexes are removed. If indexes are significant, use KeyedCollection
27
     *   instead.
28
     *
29
     */
30
    public function __construct(array $data = [])
31
    {
32
        $this->data = array_values($data);
33
    }
34
35
36
    /**
37
     * {@inheritdoc}
38
     *
39
     */
40
    public static function fromCollection(CollectionInterface $collection)
41
    {
42
        return new static($collection->toArray());
43
    }
44
45
46
    /**
47
     * {@inheritdoc}
48
     *
49
     */
50
    public function has($item)
51
    {
52
        return in_array($item, $this->data);
53
    }
54
55
56
    /**
57
     * {@inheritdoc}
58
     *
59
     */
60
    public function getWhere(callable $callable)
61
    {
62
        foreach ($this->data as $item) {
63
            if ($callable($item) === true) {
64
                return is_object($item) ? clone $item : $item;
65
            }
66
        }
67
    }
68
69
70
    /**
71
     * {@inheritdoc}
72
     *
73
     */
74
    public function getAtIndex($index)
75
    {
76
        if (!is_numeric($index)) {
77
            return;
78
        }
79
80
        return isset($this->data[$index]) ? $this->data[$index] : null;
81
    }
82
83
84
    /**
85
     * {@inheritdoc}
86
     *
87
     */
88
    public function isEmpty()
89
    {
90
        return empty($this->data);
91
    }
92
93
94
    /**
95
     * Returns the number of items within the collection.
96
     *
97
     * @return int
98
     *
99
     */
100
    public function count()
101
    {
102
        return count($this->data);
103
    }
104
105
106
    /**
107
     * Returns an iterator.
108
     *
109
     * @return \Traversable
110
     *
111
     */
112
    public function getIterator()
113
    {
114
        return new \ArrayIterator($this->data);
115
    }
116
117
118
    /**
119
     * {@inheritdoc}
120
     *
121
     */
122
    public function toArray()
123
    {
124
        return $this->data;
125
    }
126
127
128
    /**
129
     * {@inheritdoc}
130
     *
131
     */
132
    public function filter(callable $callable)
133
    {
134
        $data = array_filter($this->data, $callable, ARRAY_FILTER_USE_BOTH);
135
        return new static($data);
136
    }
137
138
139
    /**
140
     * {@inheritdoc}
141
     *
142
     */
143
    public function map(callable $callable)
144
    {
145
        return array_map($callable, $this->data);
146
    }
147
}
148