Skip to content

[12.x]: New Arr Methods #56191

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/Illuminate/Collections/Arr.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,23 @@ public static function collapse($array)
return array_merge([], ...$results);
}

/**
* Determine if the given array contains a given value.
*
* @param \ArrayAccess|array $array
* @param mixed $value
* @param bool $strict
* @return bool
*/
public static function contains($array, $value, bool $strict = false): bool
{
if ($array instanceof Enumerable) {
return $strict ? $array->containsStrict($value) : $array->contains($value);
}

return in_array($value, $array, $strict);
}

/**
* Cross join the given arrays, returning all possible permutations.
*
Expand Down Expand Up @@ -154,6 +171,19 @@ public static function divide($array)
return [array_keys($array), array_values($array)];
}

/**
* Determine if the given array does not contain a given value.
*
* @param \ArrayAccess|array $array
* @param mixed $value
* @param bool $strict
* @return bool
*/
public static function doestContains($array, $value, bool $strict = false): bool
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo:

Suggested change
public static function doestContains($array, $value, bool $strict = false): bool
public static function doesntContain($array, $value, bool $strict = false): bool

or

Suggested change
public static function doestContains($array, $value, bool $strict = false): bool
public static function doesNotContain($array, $value, bool $strict = false): bool

{
return ! static::contains($array, $value, $strict);
}

/**
* Flatten a multi-dimensional associative array with dots.
*
Expand Down
40 changes: 40 additions & 0 deletions tests/Support/SupportArrTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,26 @@ public function testCollapse()
$this->assertEquals([1, 2, 3, 'foo', 'bar', 'baz', 'boom'], Arr::collapse($mixedArray));
}

public function testContains()
{
$this->assertTrue(Arr::contains(['foo', 'bar'], 'foo'));
$this->assertTrue(Arr::contains(['foo', 'bar'], 'bar'));
$this->assertFalse(Arr::contains(['foo', 'bar'], 'baz'));

$this->assertTrue(Arr::contains(['foo' => 'bar'], 'bar'));
$this->assertFalse(Arr::contains(['foo' => 'bar'], 'baz'));

$this->assertTrue(Arr::contains(['Foo', 'Bar'], 'Foo', true));
$this->assertFalse(Arr::contains(['Foo', 'Bar'], 'foo', true));

$this->assertTrue(Arr::contains(new Collection(['foo', 'bar']), 'foo'));
$this->assertTrue(Arr::contains(new Collection(['foo', 'bar']), 'bar'));
$this->assertFalse(Arr::contains(new Collection(['foo', 'bar']), 'baz'));

$this->assertTrue(Arr::contains(new Collection(['Foo', 'Bar']), 'Foo', true));
$this->assertFalse(Arr::contains(new Collection(['Foo', 'Bar']), 'foo', true));
}

public function testCrossJoin()
{
// Single dimension
Expand Down Expand Up @@ -177,6 +197,26 @@ public function testDivide(): void
$this->assertEquals([['one' => 1, 2 => 'second'], 'one'], $values);
}

public function testDoestContains()
{
$this->assertTrue(Arr::doestContains(['foo', 'bar'], 'baz'));
$this->assertFalse(Arr::doestContains(['foo', 'bar'], 'foo'));
$this->assertFalse(Arr::doestContains(['foo', 'bar'], 'bar'));

$this->assertTrue(Arr::doestContains(['foo' => 'bar'], 'baz'));
$this->assertFalse(Arr::doestContains(['foo' => 'bar'], 'bar'));

$this->assertTrue(Arr::doestContains(['Foo', 'Bar'], 'foo', true));
$this->assertFalse(Arr::doestContains(['Foo', 'Bar'], 'Foo', true));

$this->assertTrue(Arr::doestContains(new Collection(['foo', 'bar']), 'baz'));
$this->assertFalse(Arr::doestContains(new Collection(['foo', 'bar']), 'foo'));
$this->assertFalse(Arr::doestContains(new Collection(['foo', 'bar']), 'bar'));

$this->assertTrue(Arr::doestContains(new Collection(['Foo', 'Bar']), 'foo', true));
$this->assertFalse(Arr::doestContains(new Collection(['Foo', 'Bar']), 'Foo', true));
}

public function testDot()
{
$array = Arr::dot(['foo' => ['bar' => 'baz']]);
Expand Down