选择语言 :

 Core_Arr::path

Gets a value from an array using a dot separated path.

// Get the value of $array['foo']['bar']
$value = Arr::path($array, 'foo.bar');

Using a wildcard "*" will search intermediate arrays and return an array.

// Get the values of "color" in theme
$colors = Arr::path($array, 'theme.*.color');

// Using an array of keys
$colors = Arr::path($array, array('theme', '*', 'color'));
mixed Core_Arr::path( array $array , mixed $path [, mixed $default = null , string $delimiter = null ] )

参数列表

参数 类型 描述 默认值
$array array Array to search
$path mixed Key path string (delimiter separated) or array of keys
$default mixed Default value if the path is not set null
$delimiter string Key path delimiter null
返回值
  • mixed
File: ./core/classes/arr.class.php
public static function path($array, $path, $default = null, $delimiter = null)
{
	if (!Arr::is_array($array))
	{
		// This is not an array!
		return $default;
	}

	if (is_array($path))
	{
		// The path has already been separated into keys
		$keys = $path;
	}
	else
	{
		if (array_key_exists($path, $array))
		{
			// No need to do extra processing
			return $array[$path];
		}

		if ($delimiter === null)
		{
			// Use the default delimiter
			$delimiter = Arr::$delimiter;
		}

		// Remove starting delimiters and spaces
		$path = ltrim($path, "{$delimiter} ");

		// Remove ending delimiters, spaces, and wildcards
		$path = rtrim($path, "{$delimiter} *");

		// Split the keys by delimiter
		$keys = explode($delimiter, $path);
	}

	do
	{
		$key = array_shift($keys);

		if (ctype_digit($key))
		{
			// Make the key an integer
			$key = (int)$key;
		}

		if (isset($array[$key]))
		{
			if ($keys)
			{
				if (Arr::is_array($array[$key]))
				{
					// Dig down into the next part of the path
					$array = $array[$key];
				}
				else
				{
					// Unable to dig deeper
					break;
				}
			}
			else
			{
				// Found the path requested
				return $array[$key];
			}
		}
		elseif ($key === '*')
		{
			// Handle wildcards

			$values = array();
			foreach ($array as $arr)
			{
				if ($value = Arr::path($arr, implode('.', $keys)))
				{
					$values[] = $value;
				}
			}

			if ($values)
			{
				// Found the values requested
				return $values;
			}
			else
			{
				// Unable to dig deeper
				break;
			}
		}
		else
		{
			// Unable to dig deeper
			break;
		}
	}
	while ($keys);

	// Unable to find the value requested
	return $default;
}