将字符串转换为数组地址

时间:2014-02-25 07:04:52

标签: php arrays

我有动态生成的数组$array[],它可能是多维的,我有一个返回字符串的函数,它包含数组中的地址(现有的)。我的问题是:如何创建或转换字符串$a = 'array[1]'以解决$array[1]

示例:

$array = [1,2,3,4];
$string = 'array[2]';

function magic($array, $string){
//some magic happens
return $result;

$result = magic($array, $string);
echo $result;
// and 3 is displayed;

是否有功能已经执行此操作?是否有可能做到这一点?

1 个答案:

答案 0 :(得分:0)

此代码是对来自精彩ResponseBag::get()项目的HttpFoundation的修改:

function magic($array, $path, $default = null)
{
    if (false === $pos = strpos($path, '[')) {
        return $array;
    }

    $value = $array;
    $currentKey = null;

    for ($i = $pos, $c = strlen($path); $i < $c; $i++) {
        $char = $path[$i];

        if ('[' === $char) {
            if (null !== $currentKey) {
                throw new \InvalidArgumentException(sprintf('Malformed path. Unexpected "[" at position %d.', $i));
            }

            $currentKey = '';
        } elseif (']' === $char) {
            if (null === $currentKey) {
                throw new \InvalidArgumentException(sprintf('Malformed path. Unexpected "]" at position %d.', $i));
            }

            if (!is_array($value) || !array_key_exists($currentKey, $value)) {
                return $default;
            }

            $value = $value[$currentKey];
            $currentKey = null;
        } else {
            if (null === $currentKey) {
                throw new \InvalidArgumentException(sprintf('Malformed path. Unexpected "%s" at position %d.', $char, $i));
            }

            $currentKey .= $char;
        }
    }

    if (null !== $currentKey) {
        throw new \InvalidArgumentException(sprintf('Malformed path. Path must end with "]".'));
    }

    return $value;
}

echo magic([1,2,3,4], 'array[2]'); // 3

它可以被修改为返回一个引用,只是撒上一些&符号:)