- 测试 gettype 函数对不同数据类型的返回值 - 验证 ucfirst 函数首字母大写功能 - 检查 floor 和 ceil 数学函数的正确性 - 测试 max 和 min 函数的数值比较功能 - 验证 uniqid 函数生成唯一标识符的能力 - 测试pull/1/head
parent
17e1035e21
commit
581be13a8f
8 changed files with 410 additions and 0 deletions
@ -0,0 +1,66 @@ |
|||||||
|
--TEST-- |
||||||
|
array_diff: string-based comparison |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// array_diff compares values as strings, not loose equality |
||||||
|
$a = [1, 2, 3, "1"]; |
||||||
|
$b = ["1"]; |
||||||
|
$r = array_diff($a, $b); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// 0 and false both become "" as string, but 0 != false via string compare |
||||||
|
// 0 → "0", false → "" — they differ as strings, so false NOT excluded |
||||||
|
$c = [0, 1]; |
||||||
|
$d = [false]; |
||||||
|
$r = array_diff($c, $d); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Null becomes "" as string |
||||||
|
$e = [null, 1, 2]; |
||||||
|
$f = [""]; |
||||||
|
$r = array_diff($e, $f); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Keys preserved |
||||||
|
$g = ["a" => "hello", "b" => "world"]; |
||||||
|
$h = ["hello"]; |
||||||
|
$r = array_diff($g, $h); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Numeric strings match integers (both become same string) |
||||||
|
$i = [100, 200, 300]; |
||||||
|
$j = ["200"]; |
||||||
|
$r = array_diff($i, $j); |
||||||
|
var_dump($r); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(2) { |
||||||
|
[1]=> |
||||||
|
int(2) |
||||||
|
[2]=> |
||||||
|
int(3) |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
[0]=> |
||||||
|
int(0) |
||||||
|
[1]=> |
||||||
|
int(1) |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
[1]=> |
||||||
|
int(1) |
||||||
|
[2]=> |
||||||
|
int(2) |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
["b"]=> |
||||||
|
string(5) "world" |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
[0]=> |
||||||
|
int(100) |
||||||
|
[2]=> |
||||||
|
int(300) |
||||||
|
} |
||||||
@ -0,0 +1,47 @@ |
|||||||
|
--TEST-- |
||||||
|
array_intersect: string-based comparison |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// array_intersect compares values as strings |
||||||
|
$a = [1, 2, 3, "1"]; |
||||||
|
$b = ["1", 4]; |
||||||
|
$r = array_intersect($a, $b); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Numeric strings match integers |
||||||
|
$c = [100, 200, 300]; |
||||||
|
$d = ["200", "500"]; |
||||||
|
$r = array_intersect($c, $d); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Keys preserved from first array |
||||||
|
$e = ["a" => "hello", "b" => "world"]; |
||||||
|
$f = ["world", "extra"]; |
||||||
|
$r = array_intersect($e, $f); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Empty result |
||||||
|
$g = [1, 2, 3]; |
||||||
|
$h = [4, 5, 6]; |
||||||
|
$r = array_intersect($g, $h); |
||||||
|
var_dump($r); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(2) { |
||||||
|
[0]=> |
||||||
|
int(1) |
||||||
|
[3]=> |
||||||
|
string(1) "1" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[1]=> |
||||||
|
int(200) |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
["b"]=> |
||||||
|
string(5) "world" |
||||||
|
} |
||||||
|
array(0) { |
||||||
|
} |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
--TEST-- |
||||||
|
array_unique: sort flags |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// SORT_STRING (default) - string comparison, 1 and "1" match |
||||||
|
$a = ["a" => 1, "b" => "1", "c" => 2, "d" => "2"]; |
||||||
|
$r = array_unique($a, SORT_STRING); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// SORT_REGULAR - uses zend_compare, 1 and "1" match |
||||||
|
$b = ["a" => 1, "b" => "1", "c" => 2, "d" => "2"]; |
||||||
|
$r = array_unique($b, SORT_REGULAR); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// SORT_NUMERIC - numeric comparison |
||||||
|
$c = ["a" => 1, "b" => "1.0", "c" => 2, "d" => "2.5"]; |
||||||
|
$r = array_unique($c, SORT_NUMERIC); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Keys preserved (first occurrence kept) |
||||||
|
$d = ["a" => "red", "b" => "green", "c" => "red"]; |
||||||
|
$r = array_unique($d); |
||||||
|
var_dump($r); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(2) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["c"]=> |
||||||
|
int(2) |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["c"]=> |
||||||
|
int(2) |
||||||
|
} |
||||||
|
array(3) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["c"]=> |
||||||
|
int(2) |
||||||
|
["d"]=> |
||||||
|
string(3) "2.5" |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
["a"]=> |
||||||
|
string(3) "red" |
||||||
|
["b"]=> |
||||||
|
string(5) "green" |
||||||
|
} |
||||||
@ -0,0 +1,44 @@ |
|||||||
|
--TEST-- |
||||||
|
array_shift: non-packed re-indexing |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// Non-packed (string-keyed) array: shift re-indexes integer keys |
||||||
|
$a = ["a" => 1, "b" => 2, 0 => 3, 1 => 4]; |
||||||
|
$v = array_shift($a); |
||||||
|
var_dump($v); |
||||||
|
var_dump($a); |
||||||
|
|
||||||
|
// Mixed keys with gaps |
||||||
|
$b = [5 => "first", "key" => "second", 10 => "third"]; |
||||||
|
$v = array_shift($b); |
||||||
|
var_dump($v); |
||||||
|
var_dump($b); |
||||||
|
|
||||||
|
// Single element |
||||||
|
$c = ["only" => "one"]; |
||||||
|
$v = array_shift($c); |
||||||
|
var_dump($v); |
||||||
|
var_dump($c); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(1) |
||||||
|
array(3) { |
||||||
|
["b"]=> |
||||||
|
int(2) |
||||||
|
[0]=> |
||||||
|
int(3) |
||||||
|
[1]=> |
||||||
|
int(4) |
||||||
|
} |
||||||
|
string(5) "first" |
||||||
|
array(2) { |
||||||
|
["key"]=> |
||||||
|
string(6) "second" |
||||||
|
[0]=> |
||||||
|
string(5) "third" |
||||||
|
} |
||||||
|
string(3) "one" |
||||||
|
array(0) { |
||||||
|
} |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
--TEST-- |
||||||
|
array_unshift: preserves string keys |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// String keys preserved, int keys re-indexed |
||||||
|
$a = ["a" => 1, "b" => 2]; |
||||||
|
$c = array_unshift($a, "new1", "new2"); |
||||||
|
var_dump($c); |
||||||
|
var_dump($a); |
||||||
|
|
||||||
|
// Mixed integer and string keys |
||||||
|
$b = [0 => "zero", "key" => "value"]; |
||||||
|
array_unshift($b, "prepended"); |
||||||
|
var_dump($b); |
||||||
|
|
||||||
|
// Return value is new count |
||||||
|
$d = []; |
||||||
|
$c = array_unshift($d, "x"); |
||||||
|
var_dump($c); |
||||||
|
var_dump($d); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(4) |
||||||
|
array(4) { |
||||||
|
[0]=> |
||||||
|
string(4) "new1" |
||||||
|
[1]=> |
||||||
|
string(4) "new2" |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["b"]=> |
||||||
|
int(2) |
||||||
|
} |
||||||
|
array(3) { |
||||||
|
[0]=> |
||||||
|
string(9) "prepended" |
||||||
|
[1]=> |
||||||
|
string(4) "zero" |
||||||
|
["key"]=> |
||||||
|
string(5) "value" |
||||||
|
} |
||||||
|
int(1) |
||||||
|
array(1) { |
||||||
|
[0]=> |
||||||
|
string(1) "x" |
||||||
|
} |
||||||
@ -0,0 +1,46 @@ |
|||||||
|
--TEST-- |
||||||
|
ksort: flag handling |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// SORT_REGULAR (default) — string comparison of keys |
||||||
|
$a = ["c" => 1, "a" => 2, "b" => 3]; |
||||||
|
ksort($a); |
||||||
|
var_dump($a); |
||||||
|
|
||||||
|
// SORT_NUMERIC — numeric key comparison |
||||||
|
$b = ["10" => "ten", "2" => "two", "1" => "one"]; |
||||||
|
ksort($b, SORT_NUMERIC); |
||||||
|
var_dump($b); |
||||||
|
|
||||||
|
// Mixed int and string keys |
||||||
|
$c = ["b" => 1, 0 => 2, "a" => 3]; |
||||||
|
ksort($c); |
||||||
|
var_dump($c); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(3) { |
||||||
|
["a"]=> |
||||||
|
int(2) |
||||||
|
["b"]=> |
||||||
|
int(3) |
||||||
|
["c"]=> |
||||||
|
int(1) |
||||||
|
} |
||||||
|
array(3) { |
||||||
|
[1]=> |
||||||
|
string(3) "one" |
||||||
|
[2]=> |
||||||
|
string(3) "two" |
||||||
|
[10]=> |
||||||
|
string(3) "ten" |
||||||
|
} |
||||||
|
array(3) { |
||||||
|
[0]=> |
||||||
|
int(2) |
||||||
|
["a"]=> |
||||||
|
int(3) |
||||||
|
["b"]=> |
||||||
|
int(1) |
||||||
|
} |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
--TEST-- |
||||||
|
array_sum / array_product: type handling |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// Non-numeric strings contribute 0 as int (not float) |
||||||
|
var_dump(array_sum([1, 2, "abc"])); |
||||||
|
var_dump(array_product([1, 2, "abc"])); |
||||||
|
|
||||||
|
// Numeric float strings produce float |
||||||
|
var_dump(array_sum([1, "2.5"])); |
||||||
|
var_dump(array_product([2, "2.5"])); |
||||||
|
|
||||||
|
// Pure ints produce int |
||||||
|
var_dump(array_sum([1, 2, 3])); |
||||||
|
var_dump(array_product([1, 2, 3])); |
||||||
|
|
||||||
|
// Actual floats produce float |
||||||
|
var_dump(array_sum([1, 2.5])); |
||||||
|
var_dump(array_product([2, 2.5])); |
||||||
|
|
||||||
|
// Empty array |
||||||
|
var_dump(array_sum([])); |
||||||
|
var_dump(array_product([])); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
int(3) |
||||||
|
int(0) |
||||||
|
float(3.5) |
||||||
|
float(5) |
||||||
|
int(6) |
||||||
|
int(6) |
||||||
|
float(3.5) |
||||||
|
float(5) |
||||||
|
int(0) |
||||||
|
int(1) |
||||||
@ -0,0 +1,69 @@ |
|||||||
|
--TEST-- |
||||||
|
array_combine: non-int/non-string key handling |
||||||
|
--FILE-- |
||||||
|
<?php |
||||||
|
function main() { |
||||||
|
// Basic combine |
||||||
|
$keys = ["a", "b", "c"]; |
||||||
|
$values = [1, 2, 3]; |
||||||
|
$r = array_combine($keys, $values); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Integer keys |
||||||
|
$keys2 = [10, 20, 30]; |
||||||
|
$values2 = ["a", "b", "c"]; |
||||||
|
$r = array_combine($keys2, $values2); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Float keys become string keys |
||||||
|
$keys3 = [1.5, 2.5]; |
||||||
|
$values3 = ["first", "second"]; |
||||||
|
$r = array_combine($keys3, $values3); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Null key becomes empty string key |
||||||
|
$keys4 = [null]; |
||||||
|
$values4 = ["null_key"]; |
||||||
|
$r = array_combine($keys4, $values4); |
||||||
|
var_dump($r); |
||||||
|
|
||||||
|
// Boolean key: true→"1"→1 (int via symtable), false→"" (string) |
||||||
|
$keys5 = [true, false]; |
||||||
|
$values5 = ["true_val", "false_val"]; |
||||||
|
$r = array_combine($keys5, $values5); |
||||||
|
var_dump($r); |
||||||
|
} |
||||||
|
?> |
||||||
|
--EXPECT-- |
||||||
|
array(3) { |
||||||
|
["a"]=> |
||||||
|
int(1) |
||||||
|
["b"]=> |
||||||
|
int(2) |
||||||
|
["c"]=> |
||||||
|
int(3) |
||||||
|
} |
||||||
|
array(3) { |
||||||
|
[10]=> |
||||||
|
string(1) "a" |
||||||
|
[20]=> |
||||||
|
string(1) "b" |
||||||
|
[30]=> |
||||||
|
string(1) "c" |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
["1.5"]=> |
||||||
|
string(5) "first" |
||||||
|
["2.5"]=> |
||||||
|
string(6) "second" |
||||||
|
} |
||||||
|
array(1) { |
||||||
|
[""]=> |
||||||
|
string(8) "null_key" |
||||||
|
} |
||||||
|
array(2) { |
||||||
|
[1]=> |
||||||
|
string(8) "true_val" |
||||||
|
[""]=> |
||||||
|
string(9) "false_val" |
||||||
|
} |
||||||
Loading…
Reference in new issue