TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
5.8 KiB
259 lines
5.8 KiB
--TEST--
|
|
Test array_column() function: basic functionality
|
|
--SKIPIF--
|
|
<?php die("skip AOT array_column with float keys differs from PHP"); ?>
|
|
--FILE--
|
|
<?php
|
|
class Foo
|
|
{
|
|
public function __toString(): string {
|
|
return 'last_name';
|
|
}
|
|
}
|
|
class Bar
|
|
{
|
|
public function __toString(): string {
|
|
return 'first_name';
|
|
}
|
|
}
|
|
function main()
|
|
{
|
|
echo "*** Testing array_column() : basic functionality ***\n";
|
|
/* Array representing a possible record set returned from a database */
|
|
$records = array(array('id' => 1, 'first_name' => 'John', 'last_name' => 'Doe'), array('id' => 2, 'first_name' => 'Sally', 'last_name' => 'Smith'), array('id' => 3, 'first_name' => 'Jane', 'last_name' => 'Jones'));
|
|
echo "-- first_name column from recordset --\n";
|
|
var_dump(array_column($records, 'first_name'));
|
|
echo "-- id column from recordset --\n";
|
|
var_dump(array_column($records, 'id'));
|
|
echo "-- last_name column from recordset, keyed by value from id column --\n";
|
|
var_dump(array_column($records, 'last_name', 'id'));
|
|
echo "-- last_name column from recordset, keyed by value from first_name column --\n";
|
|
var_dump(array_column($records, 'last_name', 'first_name'));
|
|
echo "\n*** Testing multiple data types ***\n";
|
|
$fh = fopen(__FILE__, 'r', true);
|
|
$values = array(array('id' => 1, 'value' => new stdClass()), array('id' => 2, 'value' => 34.2345), array('id' => 3, 'value' => true), array('id' => 4, 'value' => false), array('id' => 5, 'value' => null), array('id' => 6, 'value' => 1234), array('id' => 7, 'value' => 'Foo'), array('id' => 8, 'value' => $fh));
|
|
var_dump(array_column($values, 'value'));
|
|
var_dump(array_column($values, 'value', 'id'));
|
|
echo "\n*** Testing numeric column keys ***\n";
|
|
$numericCols = array(array('aaa', '111'), array('bbb', '222'), array('ccc', '333', -1 => 'ddd'));
|
|
var_dump(array_column($numericCols, 1));
|
|
var_dump(array_column($numericCols, 1, 0));
|
|
var_dump(array_column($numericCols, 1, 0.123));
|
|
var_dump(array_column($numericCols, 1, -1));
|
|
echo "\n*** Testing failure to find specified column ***\n";
|
|
var_dump(array_column($numericCols, 2));
|
|
var_dump(array_column($numericCols, 'foo'));
|
|
var_dump(array_column($numericCols, 0, 'foo'));
|
|
var_dump(array_column($numericCols, 3.14));
|
|
echo "\n*** Testing single dimensional array ***\n";
|
|
$singleDimension = array('foo', 'bar', 'baz');
|
|
var_dump(array_column($singleDimension, 1));
|
|
echo "\n*** Testing columns not present in all rows ***\n";
|
|
$mismatchedColumns = array(array('a' => 'foo', 'b' => 'bar', 'e' => 'bbb'), array('a' => 'baz', 'c' => 'qux', 'd' => 'aaa'), array('a' => 'eee', 'b' => 'fff', 'e' => 'ggg'));
|
|
var_dump(array_column($mismatchedColumns, 'c'));
|
|
var_dump(array_column($mismatchedColumns, 'c', 'a'));
|
|
var_dump(array_column($mismatchedColumns, 'a', 'd'));
|
|
var_dump(array_column($mismatchedColumns, 'a', 'e'));
|
|
var_dump(array_column($mismatchedColumns, 'b'));
|
|
var_dump(array_column($mismatchedColumns, 'b', 'a'));
|
|
echo "\n*** Testing use of object converted to string ***\n";
|
|
$f = new Foo();
|
|
$b = new Bar();
|
|
var_dump(array_column($records, $f));
|
|
var_dump(array_column($records, $f, $b));
|
|
echo "Done\n";
|
|
}
|
|
?>
|
|
--EXPECTF--
|
|
*** Testing array_column() : basic functionality ***
|
|
-- first_name column from recordset --
|
|
array(3) {
|
|
[0]=>
|
|
string(4) "John"
|
|
[1]=>
|
|
string(5) "Sally"
|
|
[2]=>
|
|
string(4) "Jane"
|
|
}
|
|
-- id column from recordset --
|
|
array(3) {
|
|
[0]=>
|
|
int(1)
|
|
[1]=>
|
|
int(2)
|
|
[2]=>
|
|
int(3)
|
|
}
|
|
-- last_name column from recordset, keyed by value from id column --
|
|
array(3) {
|
|
[1]=>
|
|
string(3) "Doe"
|
|
[2]=>
|
|
string(5) "Smith"
|
|
[3]=>
|
|
string(5) "Jones"
|
|
}
|
|
-- last_name column from recordset, keyed by value from first_name column --
|
|
array(3) {
|
|
["John"]=>
|
|
string(3) "Doe"
|
|
["Sally"]=>
|
|
string(5) "Smith"
|
|
["Jane"]=>
|
|
string(5) "Jones"
|
|
}
|
|
|
|
*** Testing multiple data types ***
|
|
array(8) {
|
|
[0]=>
|
|
object(stdClass)#%d (0) {
|
|
}
|
|
[1]=>
|
|
float(34.2345)
|
|
[2]=>
|
|
bool(true)
|
|
[3]=>
|
|
bool(false)
|
|
[4]=>
|
|
NULL
|
|
[5]=>
|
|
int(1234)
|
|
[6]=>
|
|
string(3) "Foo"
|
|
[7]=>
|
|
resource(%d) of type (stream)
|
|
}
|
|
array(8) {
|
|
[1]=>
|
|
object(stdClass)#%d (0) {
|
|
}
|
|
[2]=>
|
|
float(34.2345)
|
|
[3]=>
|
|
bool(true)
|
|
[4]=>
|
|
bool(false)
|
|
[5]=>
|
|
NULL
|
|
[6]=>
|
|
int(1234)
|
|
[7]=>
|
|
string(3) "Foo"
|
|
[8]=>
|
|
resource(%d) of type (stream)
|
|
}
|
|
|
|
*** Testing numeric column keys ***
|
|
array(3) {
|
|
[0]=>
|
|
string(3) "111"
|
|
[1]=>
|
|
string(3) "222"
|
|
[2]=>
|
|
string(3) "333"
|
|
}
|
|
array(3) {
|
|
["aaa"]=>
|
|
string(3) "111"
|
|
["bbb"]=>
|
|
string(3) "222"
|
|
["ccc"]=>
|
|
string(3) "333"
|
|
}
|
|
|
|
Deprecated: Implicit conversion from float 0.123 to int loses precision in %s on line %d
|
|
array(3) {
|
|
["aaa"]=>
|
|
string(3) "111"
|
|
["bbb"]=>
|
|
string(3) "222"
|
|
["ccc"]=>
|
|
string(3) "333"
|
|
}
|
|
array(3) {
|
|
[0]=>
|
|
string(3) "111"
|
|
[1]=>
|
|
string(3) "222"
|
|
["ddd"]=>
|
|
string(3) "333"
|
|
}
|
|
|
|
*** Testing failure to find specified column ***
|
|
array(0) {
|
|
}
|
|
array(0) {
|
|
}
|
|
array(3) {
|
|
[0]=>
|
|
string(3) "aaa"
|
|
[1]=>
|
|
string(3) "bbb"
|
|
[2]=>
|
|
string(3) "ccc"
|
|
}
|
|
|
|
Deprecated: Implicit conversion from float 3.14 to int loses precision in %s on line %d
|
|
array(0) {
|
|
}
|
|
|
|
*** Testing single dimensional array ***
|
|
array(0) {
|
|
}
|
|
|
|
*** Testing columns not present in all rows ***
|
|
array(1) {
|
|
[0]=>
|
|
string(3) "qux"
|
|
}
|
|
array(1) {
|
|
["baz"]=>
|
|
string(3) "qux"
|
|
}
|
|
array(3) {
|
|
[0]=>
|
|
string(3) "foo"
|
|
["aaa"]=>
|
|
string(3) "baz"
|
|
[1]=>
|
|
string(3) "eee"
|
|
}
|
|
array(3) {
|
|
["bbb"]=>
|
|
string(3) "foo"
|
|
[0]=>
|
|
string(3) "baz"
|
|
["ggg"]=>
|
|
string(3) "eee"
|
|
}
|
|
array(2) {
|
|
[0]=>
|
|
string(3) "bar"
|
|
[1]=>
|
|
string(3) "fff"
|
|
}
|
|
array(2) {
|
|
["foo"]=>
|
|
string(3) "bar"
|
|
["eee"]=>
|
|
string(3) "fff"
|
|
}
|
|
|
|
*** Testing use of object converted to string ***
|
|
array(3) {
|
|
[0]=>
|
|
string(3) "Doe"
|
|
[1]=>
|
|
string(5) "Smith"
|
|
[2]=>
|
|
string(5) "Jones"
|
|
}
|
|
array(3) {
|
|
["John"]=>
|
|
string(3) "Doe"
|
|
["Sally"]=>
|
|
string(5) "Smith"
|
|
["Jane"]=>
|
|
string(5) "Jones"
|
|
}
|
|
Done
|
|
|