@ -1402,7 +1402,7 @@ class ArrayHelperTest extends TestCase
];
//Include tests
$this->assertEquals(ArrayHelper::filter($array, ['A']), [
$this->assertEquals([
'A' => [
'B' => 1,
'C' => 2,
@ -1411,28 +1411,28 @@ class ArrayHelperTest extends TestCase
'F' => 2,
],
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['A.B']), [
], ArrayHelper::filter($array, ['A']) );
$this->assertEquals([
'A' => [
'B' => 1,
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['A.D']), [
], ArrayHelper::filter($array, ['A.B']) );
$this->assertEquals([
'A' => [
'D' => [
'E' => 1,
'F' => 2,
],
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['A.D.E']), [
], ArrayHelper::filter($array, ['A.D']) );
$this->assertEquals([
'A' => [
'D' => [
'E' => 1,
],
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['A', 'G']), [
], ArrayHelper::filter($array, ['A.D.E']) );
$this->assertEquals([
'A' => [
'B' => 1,
'C' => 2,
@ -1442,18 +1442,18 @@ class ArrayHelperTest extends TestCase
],
],
'G' => 1,
]);
$this->assertEquals(ArrayHelper::filter($array, ['A.D.E', 'G']), [
], ArrayHelper::filter($array, ['A', 'G']) );
$this->assertEquals([
'A' => [
'D' => [
'E' => 1,
],
],
'G' => 1,
]);
], ArrayHelper::filter($array, ['A.D.E', 'G']) );
//Exclude (combined with include) tests
$this->assertEquals(ArrayHelper::filter($array, ['A', '!A.B']), [
$this->assertEquals([
'A' => [
'C' => 2,
'D' => [
@ -1461,8 +1461,8 @@ class ArrayHelperTest extends TestCase
'F' => 2,
],
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['!A.B', 'A']), [
], ArrayHelper::filter($array, ['A', '!A.B']) );
$this->assertEquals([
'A' => [
'C' => 2,
'D' => [
@ -1470,8 +1470,8 @@ class ArrayHelperTest extends TestCase
'F' => 2,
],
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['A', '!A.D.E']), [
], ArrayHelper::filter($array, ['!A.B', 'A']) );
$this->assertEquals([
'A' => [
'B' => 1,
'C' => 2,
@ -1479,19 +1479,19 @@ class ArrayHelperTest extends TestCase
'F' => 2,
],
],
]);
$this->assertEquals(ArrayHelper::filter($array, ['A', '!A.D']), [
], ArrayHelper::filter($array, ['A', '!A.D.E']) );
$this->assertEquals([
'A' => [
'B' => 1,
'C' => 2,
],
]);
], ArrayHelper::filter($array, ['A', '!A.D']) );
//Non existing keys tests
$this->assertEquals(ArrayHelper::filter($array, ['X']), [] );
$this->assertEquals(ArrayHelper::filter($array, ['X.Y']), [] );
$this->assertEquals(ArrayHelper::filter($array, ['X.Y.Z']), [] );
$this->assertEquals(ArrayHelper::filter($array, ['A.X']), [] );
$this->assertEquals([], ArrayHelper::filter($array, ['X']));
$this->assertEquals([], ArrayHelper::filter($array, ['X.Y']));
$this->assertEquals([], ArrayHelper::filter($array, ['X.Y.Z']));
$this->assertEquals([], ArrayHelper::filter($array, ['A.X']));
//Values that evaluate to `true` with `empty()` tests
$tmp = [
@ -1502,7 +1502,28 @@ class ArrayHelperTest extends TestCase
'e' => true,
];
$this->assertEquals(ArrayHelper::filter($tmp, array_keys($tmp)), $tmp);
$this->assertEquals($tmp, ArrayHelper::filter($tmp, array_keys($tmp)));
}
/**
* @see https://github.com/yiisoft/yii2/issues/18395
*/
public function testFilterForIntegerKeys()
{
$array = ['a', 'b', ['c', 'd']];
// to make sure order is changed test it encoded
$this->assertEquals('{"1":"b","0":"a"}', json_encode(ArrayHelper::filter($array, [1, 0])));
$this->assertEquals([2 => ['c']], ArrayHelper::filter($array, ['2.0']));
$this->assertEquals([2 => [1 => 'd']], ArrayHelper::filter($array, [2, '!2.0']));
}
public function testFilterWithInvalidValues()
{
$array = ['a' => 'b'];
$this->assertEquals([], ArrayHelper::filter($array, [new \stdClass()]));
$this->assertEquals([], ArrayHelper::filter($array, [['a']]));
}
/**