-
Notifications
You must be signed in to change notification settings - Fork 15
/
Collection.php
136 lines (114 loc) · 2.74 KB
/
Collection.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
/**
* Collection of phpDataMapper_Row objects
*
* @package phpDataMapper
* @link http://phpdatamapper.com
* @link http://github.com/vlucas/phpDataMapper
*/
class phpDataMapper_Collection implements Iterator, Countable, ArrayAccess
{
protected $results = array();
protected $resultsIdentities = array();
/**
* Constructor function
*
* @param array $results Array of pre-loaded DataMapper_Result objects
* @param array $resultsIdentities Array of key values for given result set primary key
*/
public function __construct(array $results, array $resultsIdentities = array())
{
$this->results = $results;
$this->resultsIdentities = $resultsIdentities;
}
/**
* Returns first result in set
*/
public function first()
{
if(isset($this->results[0])) {
return $this->results[0];
} else {
return false;
}
}
/**
* ResultSet to array using given key/value columns
*/
public function toArray($keyColumn = null, $valueColumn = null)
{
// Both empty
if(null === $keyColumn && null === $valueColumn) {
$return = $this->results;
// Key column name
} elseif(null !== $keyColumn && null === $valueColumn) {
$return = array();
foreach($this->results as $row) {
$return[] = $row->$keyColumn;
}
// Both key and valud columns filled in
} else {
$return = array();
foreach($this->results as $row) {
$return[$row->$keyColumn] = $row->$valueColumn;
}
}
return $return;
}
// SPL - Countable functions
// ----------------------------------------------
/**
* Get a count of all the records in the result set
*/
public function count()
{
return count($this->results);
}
// ----------------------------------------------
// SPL - Iterator functions
// ----------------------------------------------
public function current()
{
return current($this->results);
}
public function key()
{
return key($this->results);
}
public function next()
{
next($this->results);
}
public function rewind()
{
reset($this->results);
}
public function valid()
{
return (current($this->results) !== FALSE);
}
// ----------------------------------------------
// SPL - ArrayAccess functions
// ----------------------------------------------
public function offsetExists($key) {
return isset($this->results[$key]);
}
public function offsetGet($key) {
return $this->results[$key];
}
public function offsetSet($key, $value) {
if($key === null) {
return $this->results[] = $value;
} else {
return $this->results[$key] = $value;
}
}
public function offsetUnset($key) {
if(is_int($key)) {
array_splice($this->results, $key, 1);
} else {
unset($this->results[$key]);
}
}
// ----------------------------------------------
}