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