Category
stdlib
Problem
Zend provides array_uasort() and array_uksort() — sort array values or keys in-place using a user callable, preserving the opposite dimension (keys vs values). This compiler registers uasort() / uksort() but not the array_* variants; function_exists() is false for both under bin/vm.php.
Distinct from #5644 (assoc diff/intersect + array_udiff family) and from uasort/uksort (already present).
php-src reference
Repro (failure today)
<?php
$a = ['b' => 2, 'a' => 1];
array_uasort($a, fn($x, $y) => $x <=> $y);
var_export($a);
$k = ['b' => 1, 'a' => 2];
array_uksort($k, fn($x, $y) => strcmp((string)$x, (string)$y));
var_export($k);
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php -r "var_dump(function_exists(\"array_uasort\"), function_exists(\"array_uksort\"));"
php bin/vm.php repro.php
'
| Runtime |
Result |
| Zend PHP 8.x |
Sorted assoc arrays (values / keys) |
| vm.php today |
Call to undefined function array_uasort() |
Verified 2026-06-04: function_exists → false / false; uasort/uksort → true.
Scope (this repo)
| Area |
Path |
| VM builtins |
ext/standard/array_uasort.php, array_uksort.php (or shared helper with uasort_.php / uksort_.php) |
| Registration |
ext/standard/Module.php |
| Callbacks |
VM closure + string builtin names (#3086); enum case operands must pass through (#5637) |
| JIT/AOT |
phase-2 after VM green (lib/JIT/Builtin/, docs/capabilities.md) |
PHP-in-PHP: implement sorting in ext/standard + VM hashtable helpers — do not add new runtime/*.c compare tables.
Done when
Related
Category
stdlibProblem
Zend provides
array_uasort()andarray_uksort()— sort array values or keys in-place using a usercallable, preserving the opposite dimension (keys vs values). This compiler registersuasort()/uksort()but not thearray_*variants;function_exists()is false for both underbin/vm.php.Distinct from #5644 (assoc diff/intersect +
array_udifffamily) and fromuasort/uksort(already present).php-src reference
ext/standard/array.c—PHP_FUNCTION(array_uasort),PHP_FUNCTION(array_uksort)→php_array_uasort,php_array_uksortext/standard/php_array.h— compare callback wiring (reuseusort/uksortinternals)Repro (failure today)
Call to undefined function array_uasort()Verified 2026-06-04:
function_exists→false/false;uasort/uksort→true.Scope (this repo)
ext/standard/array_uasort.php,array_uksort.php(or shared helper withuasort_.php/uksort_.php)ext/standard/Module.phplib/JIT/Builtin/,docs/capabilities.md)PHP-in-PHP: implement sorting in
ext/standard+ VM hashtable helpers — do not add newruntime/*.ccompare tables.Done when
var_exportoutput matches Zend on VMarray_uasort/array_uksortwith closure callbacks on enum case values preserve enum objects (pairs Stdlib: array_udiff()/array_uintersect() callbacks must receive enum case objects (ext/standard/array.c) #5637)test/compliance/cases/stdlib/array_uasort_uksort.phptgreen./script/ci-fast.sh --filter array_uasortgreenRelated
array_udiff/array_uintersectuser-compare familyuksort()VM