Skip to content

Commit

Permalink
Fixed bug that Arr::forget failed when the integer key does not exist…
Browse files Browse the repository at this point in the history
…s. (#3348)

* Fixed bug that Arr::forget failed when the integer key does not exists.

* Added test cases
  • Loading branch information
limingxinleo committed Mar 8, 2021
1 parent 48b319e commit 3f26863
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
4 changes: 4 additions & 0 deletions CHANGELOG-2.1.md
@@ -1,5 +1,9 @@
# v2.1.10 - TBD

## Fixed

- [#3348](https://github.com/hyperf/hyperf/pull/3348) Fixed bug that `Arr::forget` failed when the integer key does not exists.

# v2.1.9 - 2021-03-08

## Fixed
Expand Down
2 changes: 1 addition & 1 deletion src/utils/src/Arr.php
Expand Up @@ -205,7 +205,7 @@ public static function forget(array &$array, $keys): void
unset($array[$key]);
continue;
}
$parts = explode('.', $key);
$parts = explode('.', (string) $key);
// clean up before each pass
$array = &$original;
while (count($parts) > 1) {
Expand Down
29 changes: 29 additions & 0 deletions src/utils/tests/ArrTest.php
Expand Up @@ -141,4 +141,33 @@ public function testArrMerge()
$result = Arr::merge($result, $array2);
$this->assertSame($array1, $result);
}

public function testArrorForget()
{
$data = [1, 2];
Arr::forget($data, [1]);
$this->assertSame([1], $data);

$data = ['id' => 1, 'name' => 'Hyperf'];
Arr::forget($data, ['gender']);
$this->assertSame(['id' => 1, 'name' => 'Hyperf'], $data);
Arr::forget($data, ['id']);
$this->assertSame(['name' => 'Hyperf'], $data);

$data = ['id' => 1, 'name' => 'Hyperf', 'data' => ['id' => 2], 'data.name' => 'Swoole'];
Arr::forget($data, ['data.gender']);
$this->assertSame(['id' => 1, 'name' => 'Hyperf', 'data' => ['id' => 2], 'data.name' => 'Swoole'], $data);
Arr::forget($data, ['data.name']);
$this->assertSame(['id' => 1, 'name' => 'Hyperf', 'data' => ['id' => 2]], $data);
Arr::forget($data, ['data.id']);
$this->assertSame(['id' => 1, 'name' => 'Hyperf', 'data' => []], $data);

$data = ['data' => ['data' => ['id' => 1, 'name' => 'Hyperf']]];
Arr::forget($data, ['data.data.id']);
$this->assertSame(['data' => ['data' => ['name' => 'Hyperf']]], $data);

$data = [1, 2];
Arr::forget($data, [2]);
$this->assertSame([1, 2], $data);
}
}

0 comments on commit 3f26863

Please sign in to comment.