我试图找出在将一个键或一组键传入函数并获取该值时使用点表示法的最佳方法。
实施例
shipping.first_name
在实际的$_POST
数组中看起来像什么:
$_POST[shipping][first_name] = 'some value'
我希望能够传入(作为参数)字符串,并让函数返回post值。
function get_post($str = NULL){
return $_POST[$key1][$key1]..etc.
}
当前尝试(按预期工作,但需要输入$ _POST):
来自:SO Question
function assignArrayByPath(&$arr, $path) {
$keys = explode('.', $path);
while ($key = array_shift($keys)) {
$arr = &$arr[$key];
}
}
$output = array();
assignArrayByPath($output, $str);
这会生成一个数组:
Array ( [shipping] => Array ( [first_name] => ) )
我希望这样做:
return isset($_POST.$output) ? true : false;
那么如何从句点分隔的字符串中获取该数组并检查它是否存在于POST中?
我认为这可能是重复的,但我并不积极。如果是的话,我提前道歉。非常感谢任何帮助。
答案 0 :(得分:1)
请参阅Laravel array_set
工具http://laravel.com/api/source-function-array_set.html#319
/**
* Set an array item to a given value using "dot" notation.
*
* If no key is given to the method, the entire array will be replaced.
*
* @param array $array
* @param string $key
* @param mixed $value
* @return array
*/
function array_set(&$array, $key, $value)
{
if (is_null($key)) return $array = $value;
$keys = explode('.', $key);
while (count($keys) > 1)
{
$key = array_shift($keys);
// If the key doesn't exist at this depth, we will just create an empty array
// to hold the next value, allowing us to create the arrays to hold final
// values at the correct depth. Then we'll keep digging into the array.
if ( ! isset($array[$key]) || ! is_array($array[$key]))
{
$array[$key] = array();
}
$array =& $array[$key];
}
$array[array_shift($keys)] = $value;
return $array;
}
支票存在,您可以看到array_get
http://laravel.com/api/source-function-array_get.html#224
/**
* Get an item from an array using "dot" notation.
*
* @param array $array
* @param string $key
* @param mixed $default
* @return mixed
*/
function array_get($array, $key, $default = null)
{
if (is_null($key)) return $array;
if (isset($array[$key])) return $array[$key];
foreach (explode('.', $key) as $segment)
{
if ( ! is_array($array) || ! array_key_exists($segment, $array))
{
return value($default);
}
$array = $array[$segment];
}
return $array;
}