1
0
mirror of https://github.com/php/php-src.git synced 2026-04-20 22:41:20 +02:00
Files
archived-php-src/ext/standard/tests/array/ksort_variation9.phpt
Denis Vaksman cd1aed8edd Fix GH-9296: ksort behaves incorrectly on arrays with mixed keys
The comparator function used at ksort in SORT_REGULAR mode
need to be consistent with basic comparison rules. These rules
were changed in PHP-8.0 for numeric strings, but comparator
used at ksort kept the old behaviour. It leads to inconsistent
situations, when after ksort the first key is GREATER than some
of the next ones by according to the basic comparison operators.

Closes GH-9293.
2022-08-12 11:32:23 +02:00

252 lines
3.5 KiB
PHP

--TEST--
Test ksort() function : usage variations - sorting arrays with/without keys
--FILE--
<?php
/*
* Testing ksort() by providing arrays with/without key values for $array argument with following flag values:
* 1.flag value as default
* 2.SORT_REGULAR - compare items normally
*/
echo "*** Testing ksort() : usage variations ***\n";
// list of arrays with/without key values
$various_arrays = array (
array(5 => 55, 66, 22, 33, 11),
array ("a" => "orange", "banana", "c" => "apple"),
array(1, 2, 3, 4, 5, 6),
array("first", 5 => "second", 1 => "third"),
array(1, 1, 8 => 1, 4 => 1, 19, 3 => 13),
array('bar' => 'baz', "foo" => 1),
array('a' => 1,'b' => array('e' => 2,'f' => 3),'c' => array('g' => 4),'d' => 5),
);
$count = 1;
echo "\n-- Testing ksort() by supplying various arrays with/without key values --\n";
// loop through to test ksort() with different arrays,
foreach ($various_arrays as $array) {
echo "\n-- Iteration $count --\n";
echo "- With default sort flag -\n";
$temp_array = $array;
var_dump( ksort($temp_array) );
var_dump($temp_array);
echo "- Sort flag = SORT_REGULAR -\n";
$temp_array = $array;
var_dump( ksort($temp_array, SORT_REGULAR) );
var_dump($temp_array);
$count++;
}
echo "Done\n";
?>
--EXPECT--
*** Testing ksort() : usage variations ***
-- Testing ksort() by supplying various arrays with/without key values --
-- Iteration 1 --
- With default sort flag -
bool(true)
array(5) {
[5]=>
int(55)
[6]=>
int(66)
[7]=>
int(22)
[8]=>
int(33)
[9]=>
int(11)
}
- Sort flag = SORT_REGULAR -
bool(true)
array(5) {
[5]=>
int(55)
[6]=>
int(66)
[7]=>
int(22)
[8]=>
int(33)
[9]=>
int(11)
}
-- Iteration 2 --
- With default sort flag -
bool(true)
array(3) {
[0]=>
string(6) "banana"
["a"]=>
string(6) "orange"
["c"]=>
string(5) "apple"
}
- Sort flag = SORT_REGULAR -
bool(true)
array(3) {
[0]=>
string(6) "banana"
["a"]=>
string(6) "orange"
["c"]=>
string(5) "apple"
}
-- Iteration 3 --
- With default sort flag -
bool(true)
array(6) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
[5]=>
int(6)
}
- Sort flag = SORT_REGULAR -
bool(true)
array(6) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
[5]=>
int(6)
}
-- Iteration 4 --
- With default sort flag -
bool(true)
array(3) {
[0]=>
string(5) "first"
[1]=>
string(5) "third"
[5]=>
string(6) "second"
}
- Sort flag = SORT_REGULAR -
bool(true)
array(3) {
[0]=>
string(5) "first"
[1]=>
string(5) "third"
[5]=>
string(6) "second"
}
-- Iteration 5 --
- With default sort flag -
bool(true)
array(6) {
[0]=>
int(1)
[1]=>
int(1)
[3]=>
int(13)
[4]=>
int(1)
[8]=>
int(1)
[9]=>
int(19)
}
- Sort flag = SORT_REGULAR -
bool(true)
array(6) {
[0]=>
int(1)
[1]=>
int(1)
[3]=>
int(13)
[4]=>
int(1)
[8]=>
int(1)
[9]=>
int(19)
}
-- Iteration 6 --
- With default sort flag -
bool(true)
array(2) {
["bar"]=>
string(3) "baz"
["foo"]=>
int(1)
}
- Sort flag = SORT_REGULAR -
bool(true)
array(2) {
["bar"]=>
string(3) "baz"
["foo"]=>
int(1)
}
-- Iteration 7 --
- With default sort flag -
bool(true)
array(4) {
["a"]=>
int(1)
["b"]=>
array(2) {
["e"]=>
int(2)
["f"]=>
int(3)
}
["c"]=>
array(1) {
["g"]=>
int(4)
}
["d"]=>
int(5)
}
- Sort flag = SORT_REGULAR -
bool(true)
array(4) {
["a"]=>
int(1)
["b"]=>
array(2) {
["e"]=>
int(2)
["f"]=>
int(3)
}
["c"]=>
array(1) {
["g"]=>
int(4)
}
["d"]=>
int(5)
}
Done