Commit 43658960848 for php.net

commit 436589608487f9949aef8de234872a242cd8c81b
Author: Lazizbek Ergashev <lazerg2@gmail.com>
Date:   Mon Sep 7 13:24:10 2026 +0800

    Fix GH-23576: array_keys() on an empty array returns a non-zero next index (#23577)

    `array_keys()` reused the input array when it was empty. For an array
    that was previously populated, this preserved the next free index and
    caused later appends to start at a non-zero key, even though
    `array_keys()` returns a list.

    Return a fresh empty array, matching `array_values()`, and cover both
    previously populated and fresh empty arrays across all argument forms.

    Closes #23577

diff --git a/NEWS b/NEWS
index 8b5604d857a..a8d2c0727be 100644
--- a/NEWS
+++ b/NEWS
@@ -114,6 +114,8 @@ PHP                                                                        NEWS
     (arshidkv12)
   . Fixed GH-23338 (fsockopen()/pfsockopen() ValueError reported wrong
     argument number for $timeout). (lacatoire)
+  . Fixed bug GH-23576 (Next index for array returned from array_keys() is
+    wrong). (Lazizbek Ergashev)

 - SimpleXML:
   . Fixed writing to a dimension of the object returned by attributes() not
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 556f9a7ee66..ebd114844ab 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -4504,7 +4504,7 @@ PHP_FUNCTION(array_keys)

 	/* Base case: empty input */
 	if (!elem_count) {
-		RETURN_COPY(input);
+		RETURN_EMPTY_ARRAY();
 	}

 	/* Initialize return array */
diff --git a/ext/standard/tests/array/gh23576.phpt b/ext/standard/tests/array/gh23576.phpt
new file mode 100644
index 00000000000..c3ada5559a2
--- /dev/null
+++ b/ext/standard/tests/array/gh23576.phpt
@@ -0,0 +1,58 @@
+--TEST--
+GH-23576 (Next index for array returned from array_keys() is wrong)
+--FILE--
+<?php
+$a = [123 => 123];
+unset($a[123]);
+
+$b = array_keys($a);
+$b[] = 42;
+var_dump($b);
+
+$c = array_keys($a, 123);
+$c[] = 42;
+var_dump($c);
+
+$d = array_keys($a, 123, true);
+$d[] = 42;
+var_dump($d);
+
+$e = [];
+
+$f = array_keys($e);
+$f[] = 42;
+var_dump($f);
+
+$g = array_keys($e, 123);
+$g[] = 42;
+var_dump($g);
+
+$h = array_keys($e, 123, true);
+$h[] = 42;
+var_dump($h);
+?>
+--EXPECT--
+array(1) {
+  [0]=>
+  int(42)
+}
+array(1) {
+  [0]=>
+  int(42)
+}
+array(1) {
+  [0]=>
+  int(42)
+}
+array(1) {
+  [0]=>
+  int(42)
+}
+array(1) {
+  [0]=>
+  int(42)
+}
+array(1) {
+  [0]=>
+  int(42)
+}