1--TEST--
2Test array_column() function: testing with objects
3--FILE--
4<?php
5
6class User
7{
8    public $id, $first_name, $last_name;
9
10    public function __construct($id, $first_name, $last_name)
11    {
12        $this->id = $id;
13        $this->first_name = $first_name;
14        $this->last_name = $last_name;
15    }
16}
17
18function newUser($id, $first_name, $last_name)
19{
20    $o = new stdClass;
21    $o->{0} = $id;
22    $o->{1} = $first_name;
23    $o->{2} = $last_name;
24
25    return $o;
26}
27
28class Something
29{
30    public function __isset($name)
31    {
32        return $name == 'first_name';
33    }
34
35    public function __get($name)
36    {
37        return new User(4, 'Jack', 'Sparrow');
38    }
39}
40
41$records = array(
42    newUser(1, 'John', 'Doe'),
43    newUser(2, 'Sally', 'Smith'),
44    newUser(3, 'Jane', 'Jones'),
45    new User(1, 'John', 'Doe'),
46    new User(2, 'Sally', 'Smith'),
47    new User(3, 'Jane', 'Jones'),
48    new Something,
49);
50
51echo "*** Testing array_column() : object property fetching (numeric property names) ***\n";
52
53echo "-- first_name column from recordset --\n";
54var_dump(array_column($records, 1));
55
56echo "-- id column from recordset --\n";
57var_dump(array_column($records, 0));
58
59echo "-- last_name column from recordset, keyed by value from id column --\n";
60var_dump(array_column($records, 2, 0));
61
62echo "-- last_name column from recordset, keyed by value from first_name column --\n";
63var_dump(array_column($records, 2, 1));
64
65echo "*** Testing array_column() : object property fetching (string property names) ***\n";
66
67echo "-- first_name column from recordset --\n";
68var_dump(array_column($records, 'first_name'));
69
70echo "-- id column from recordset --\n";
71var_dump(array_column($records, 'id'));
72
73echo "-- last_name column from recordset, keyed by value from id column --\n";
74var_dump(array_column($records, 'last_name', 'id'));
75
76echo "-- last_name column from recordset, keyed by value from first_name column --\n";
77var_dump(array_column($records, 'last_name', 'first_name'));
78
79echo "Done\n";
80?>
81--EXPECT--
82*** Testing array_column() : object property fetching (numeric property names) ***
83-- first_name column from recordset --
84array(3) {
85  [0]=>
86  string(4) "John"
87  [1]=>
88  string(5) "Sally"
89  [2]=>
90  string(4) "Jane"
91}
92-- id column from recordset --
93array(3) {
94  [0]=>
95  int(1)
96  [1]=>
97  int(2)
98  [2]=>
99  int(3)
100}
101-- last_name column from recordset, keyed by value from id column --
102array(3) {
103  [1]=>
104  string(3) "Doe"
105  [2]=>
106  string(5) "Smith"
107  [3]=>
108  string(5) "Jones"
109}
110-- last_name column from recordset, keyed by value from first_name column --
111array(3) {
112  ["John"]=>
113  string(3) "Doe"
114  ["Sally"]=>
115  string(5) "Smith"
116  ["Jane"]=>
117  string(5) "Jones"
118}
119*** Testing array_column() : object property fetching (string property names) ***
120-- first_name column from recordset --
121array(4) {
122  [0]=>
123  string(4) "John"
124  [1]=>
125  string(5) "Sally"
126  [2]=>
127  string(4) "Jane"
128  [3]=>
129  object(User)#8 (3) {
130    ["id"]=>
131    int(4)
132    ["first_name"]=>
133    string(4) "Jack"
134    ["last_name"]=>
135    string(7) "Sparrow"
136  }
137}
138-- id column from recordset --
139array(3) {
140  [0]=>
141  int(1)
142  [1]=>
143  int(2)
144  [2]=>
145  int(3)
146}
147-- last_name column from recordset, keyed by value from id column --
148array(3) {
149  [1]=>
150  string(3) "Doe"
151  [2]=>
152  string(5) "Smith"
153  [3]=>
154  string(5) "Jones"
155}
156-- last_name column from recordset, keyed by value from first_name column --
157array(3) {
158  ["John"]=>
159  string(3) "Doe"
160  ["Sally"]=>
161  string(5) "Smith"
162  ["Jane"]=>
163  string(5) "Jones"
164}
165Done
166