Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 递归地从关键帧左修剪特定字符_Php_Arrays_Recursion - Fatal编程技术网

Php 递归地从关键帧左修剪特定字符

Php 递归地从关键帧左修剪特定字符,php,arrays,recursion,Php,Arrays,Recursion,我不能完全解决这个问题 我希望会有一个默认的PHP函数来实现这一点,但似乎没有。我在网上找到的代码似乎并不适合我的情况,因为人们通常只需要修改数组值,而不需要修改它们的键 我基本上需要一个递归函数,它用同一个键替换以“u”开头的每个键,而不使用该符号 这里有人用过类似的东西吗?试试这个: function replaceKeys(array $input) { $return = array(); foreach ($input as $key => $value) {

我不能完全解决这个问题

我希望会有一个默认的PHP函数来实现这一点,但似乎没有。我在网上找到的代码似乎并不适合我的情况,因为人们通常只需要修改数组值,而不需要修改它们的键

我基本上需要一个递归函数,它用同一个键替换以“u”开头的每个键,而不使用该符号

这里有人用过类似的东西吗?

试试这个:

function replaceKeys(array $input) {

    $return = array();
    foreach ($input as $key => $value) {
        if (strpos($key, '_') === 0)
            $key = substr($key, 1);

        if (is_array($value))
            $value = replaceKeys($value); 

        $return[$key] = $value;
    }
    return $return;
}
所以这个代码:

$arr = array('_name' => 'John', 
             'ages'  => array(
                  '_first' => 10, 
                  'last'   => 15));

print_r(replaceKeys($arr));
将产生(如图所示):


使用PHP的本机数组\u walk\u recursive()

这似乎是一个更干净的解决方案,在回调函数中将$key作为引用传递,如下所示:

array_walk_recursive($your_array, function ($item, &$key) {
    if (strpos($key, '_') === 0) {
        $key = substr($key, 1);
    }
});

这是不可能的:如果目标密钥不属于“叶节点”,这将不起作用。
array_walk_recursive($your_array, function ($item, &$key) {
    if (strpos($key, '_') === 0) {
        $key = substr($key, 1);
    }
});