修剪闭合中的钥匙

问题描述 投票:0回答:1

我的闭包返回它作为数组操作的键时遇到问题,我做错了什么?

输入:

$array = array(
    '/key1/'        => null,
    '/key2/part1/'  => null,
);

方法:

    /**
     * Trim slashes from keys or strings
     *
     * @param $value
     * @return array|string
     */
    private function trimSlashes($value)
    {
        if (is_array($value))
        {
            array_walk($value, function($val, $key) USE (&$value)
            {
                if (FALSE !== strpos($key, '/')) $key = rtrim($key, '/');
            });
        } else {
            $value = rtrim($value, '/');
        }
        return $value;
    }

这应该返回:

$array = array(
    '/key1'         => null,
    '/key2/part1'   => null,
);
php arrays closures php-5.4
1个回答
0
投票

array_walk 不可能用于更改数组中的键。 也许您可以将 $value 作为类成员而不是闭包中的引用获取。 但我认为最好用 foreach 循环迭代它,就像这样..

private function trimSlashes($value)
    {
        if (is_array($value))
        {
            foreach ($value as $key => $val) {
                unset($value[$key]);
                $trimmedKey = rtrim($key, '/');
                $value[$trimmedKey] = $val;
             }
        } else {
            $value = rtrim($value, '/');
        }
        return $value;
    }
© www.soinside.com 2019 - 2024. All rights reserved.