for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Shlinkio\Shlink\Common\Collection;
use function array_key_exists;
use function array_shift;
use function is_array;
final class PathCollection
{
/**
* @var array
*/
private $array;
public function __construct(array $array)
$this->array = $array;
}
public function pathExists(array $path): bool
return $this->checkPathExists($path, $this->array);
private function checkPathExists(array $path, array $array): bool
// As soon as a step is not found, the path does not exist
$step = array_shift($path);
if (! array_key_exists($step, $array)) {
return false;
// Once the path is empty, we have found all the parts in the path
if (empty($path)) {
return true;
// If current value is not an array, then we have not found the path
$newArray = $array[$step];
if (! is_array($newArray)) {
return $this->checkPathExists($path, $newArray);
* @return mixed
public function getValueInPath(array $path)
$array = $this->array;
do {
if (! is_array($array) || ! array_key_exists($step, $array)) {
return null;
$array = $array[$step];
} while (! empty($path));
return $array;