Skip to content

Commit 04e5982

Browse files
committed
revoke and simplifying the grouping logic
1 parent cd1ffd5 commit 04e5982

File tree

2 files changed

+112
-95
lines changed

2 files changed

+112
-95
lines changed

ext/standard/array.c

+14-11
Original file line numberDiff line numberDiff line change
@@ -4301,7 +4301,7 @@ PHP_FUNCTION(array_column)
43014301
if (!group_is_null && group_bool && !index_is_null) {
43024302

43034303
zval *group_entry;
4304-
zval ft;
4304+
zval fpal;
43054305

43064306
ZEND_HASH_FOREACH_VAL(input, data) {
43074307
ZVAL_DEREF(data);
@@ -4316,22 +4316,25 @@ PHP_FUNCTION(array_column)
43164316
zval rv;
43174317
zval *keyval = array_column_fetch_prop(data, index_str, index_long, cache_slot_index, &rv);
43184318

4319-
convert_to_string(keyval);
4320-
group_entry = zend_symtable_find(Z_ARRVAL_P(return_value), Z_STR_P(keyval));
4319+
if (keyval) {
4320+
convert_to_string(keyval);
4321+
group_entry = zend_symtable_find(Z_ARRVAL_P(return_value), Z_STR_P(keyval));
43214322

4322-
if (group_entry != NULL) {
4323-
ZVAL_COPY_VALUE(&ft, group_entry);
4324-
} else {
4325-
array_init(&ft);
4326-
zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(keyval), &ft);
4327-
}
4323+
if (group_entry != NULL) {
4324+
ZVAL_COPY_VALUE(&fpal, group_entry);
4325+
} else {
4326+
array_init(&fpal);
4327+
zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(keyval), &fpal);
4328+
}
43284329

4329-
zend_hash_next_index_insert_new(Z_ARRVAL_P(&ft), colval);
4330+
zend_hash_next_index_insert_new(Z_ARRVAL_P(&fpal), colval);
43304331

4331-
if (keyval) {
43324332
zval_ptr_dtor(keyval);
4333+
} else {
4334+
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), colval);
43334335
}
43344336

4337+
43354338
} ZEND_HASH_FOREACH_END();
43364339

43374340
} else {

ext/standard/tests/array/array_column_group_001.phpt

+98-84
Original file line numberDiff line numberDiff line change
@@ -12,89 +12,103 @@ $ar = [
1212
['id' => 6, 'name' => 'wael', 'score' => 'D', 's' => '1'],
1313
];
1414

15-
print_r(array_column($ar, null, 'id', true));
15+
var_dump(array_column($ar, null, 'id', true));
1616
?>
1717
--EXPECT--
18-
Array
19-
(
20-
[1] => Array
21-
(
22-
[0] => Array
23-
(
24-
[id] => 1
25-
[name] => hassan
26-
[score] => A
27-
[s] => 1
28-
)
29-
30-
)
31-
32-
[2] => Array
33-
(
34-
[0] => Array
35-
(
36-
[id] => 2
37-
[name] => hassan
38-
[score] => B
39-
[s] => 2
40-
)
41-
42-
)
43-
44-
[3] => Array
45-
(
46-
[0] => Array
47-
(
48-
[id] => 3
49-
[name] => ahmed
50-
[score] => C
51-
[s] => 1
52-
)
53-
54-
)
55-
56-
[4] => Array
57-
(
58-
[0] => Array
59-
(
60-
[id] => 4
61-
[name] => moustafa
62-
[score] => D
63-
[s] => 2
64-
)
65-
66-
)
67-
68-
[5] => Array
69-
(
70-
[0] => Array
71-
(
72-
[id] => 5
73-
[name] => hassan
74-
[score] => A
75-
[s] => 3
76-
)
77-
78-
)
79-
80-
[6] => Array
81-
(
82-
[0] => Array
83-
(
84-
[id] => 6
85-
[name] => wael
86-
[score] => A
87-
[s] => 3
88-
)
89-
90-
[1] => Array
91-
(
92-
[id] => 6
93-
[name] => wael
94-
[score] => D
95-
[s] => 1
96-
)
97-
98-
)
99-
100-
)
18+
array(6) {
19+
[1]=>
20+
array(1) {
21+
[0]=>
22+
array(4) {
23+
["id"]=>
24+
string(1) "1"
25+
["name"]=>
26+
string(6) "hassan"
27+
["score"]=>
28+
string(1) "A"
29+
["s"]=>
30+
string(1) "1"
31+
}
32+
}
33+
[2]=>
34+
array(1) {
35+
[0]=>
36+
array(4) {
37+
["id"]=>
38+
string(1) "2"
39+
["name"]=>
40+
string(6) "hassan"
41+
["score"]=>
42+
string(1) "B"
43+
["s"]=>
44+
string(1) "2"
45+
}
46+
}
47+
[3]=>
48+
array(1) {
49+
[0]=>
50+
array(4) {
51+
["id"]=>
52+
string(1) "3"
53+
["name"]=>
54+
string(5) "ahmed"
55+
["score"]=>
56+
string(1) "C"
57+
["s"]=>
58+
string(1) "1"
59+
}
60+
}
61+
[4]=>
62+
array(1) {
63+
[0]=>
64+
array(4) {
65+
["id"]=>
66+
string(1) "4"
67+
["name"]=>
68+
string(8) "moustafa"
69+
["score"]=>
70+
string(1) "D"
71+
["s"]=>
72+
string(1) "2"
73+
}
74+
}
75+
[5]=>
76+
array(1) {
77+
[0]=>
78+
array(4) {
79+
["id"]=>
80+
string(1) "5"
81+
["name"]=>
82+
string(6) "hassan"
83+
["score"]=>
84+
string(1) "A"
85+
["s"]=>
86+
string(1) "3"
87+
}
88+
}
89+
[6]=>
90+
array(2) {
91+
[0]=>
92+
array(4) {
93+
["id"]=>
94+
string(1) "6"
95+
["name"]=>
96+
string(4) "wael"
97+
["score"]=>
98+
string(1) "A"
99+
["s"]=>
100+
string(1) "3"
101+
}
102+
[1]=>
103+
array(4) {
104+
["id"]=>
105+
string(1) "6"
106+
["name"]=>
107+
string(4) "wael"
108+
["score"]=>
109+
string(1) "D"
110+
["s"]=>
111+
string(1) "1"
112+
}
113+
}
114+
}

0 commit comments

Comments
 (0)