for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Seasx\SeasLogger;
use Closure;
/**
* Class ArrayHelper
* @package Seasx\SeasLogger
*/
class ArrayHelper
{
* @param $array
* @param $key
* @param null $default
$default
null
* @return mixed|null
public static function getValue($array, $key, $default = null)
if ($key instanceof Closure) {
return $key($array, $default);
}
if (is_array($key)) {
$lastKey = array_pop($key);
foreach ($key as $keyPart) {
$array = static::getValue($array, $keyPart);
$key = $lastKey;
if (is_array($array) && (isset($array[$key]) || array_key_exists($key, $array))) {
return $array[$key];
if (($pos = strrpos($key, '.')) !== false) {
$array = static::getValue($array, substr($key, 0, $pos), $default);
$key = substr($key, $pos + 1);
if (is_object($array)) {
// this is expected to fail if the property does not exist, or __get() is not implemented
// it is not reliably possible to check whether a property is accessible beforehand
return $array->$key;
} elseif (is_array($array)) {
return (isset($array[$key]) || array_key_exists($key, $array)) ? $array[$key] : $default;
return $default;
public static function remove(&$array, $key, $default = null)
$value = $array[$key];
unset($array[$key]);
return $value;