To accommodate multi-digit numbers, parse the strings and capture the trailing number as an int-cast value.
Because array_multisort() will perform a final sort on the original input array, a stable sort is assured by sorting by original indexes after sorting by trailing number. Demo
array_multisort(
array_map(
fn($v) => sscanf($v, '%*s = %d')[0],
$array
),
array_keys($array),
$array
);
Another way is to perform an explicit numeric sort by a sanitized copy of the array. Demo
array_multisort(
preg_replace('#\D+#', '', $array),
SORT_ASC,
SORT_NUMERIC,
array_keys($array),
$array
);
With usort() you can directly enjoying a stable sort. The spaceship operator will automatically compare two numeric strings as numbers so no explicit casting is necessary. Demo
usort(
$array,
fn($a, $b) => explode('= ', $a, 2)[1] <=> explode('= ', $b, 2)[1]
);
If you don't like the other people on your dev team, you can left trim a sufficiently wide range of characters to leave only numbers. Demo
usort(
$array,
fn($a, $b) => ltrim($a, ':..~') <=> ltrim($b, ':..~')
);
Or isolate substrings starting from the first encountered digit. Demo
usort(
$array,
fn($a, $b) => strpbrk($a, '0123456789') <=> strpbrk($b, '0123456789')
);