Php 数组\u walk\u recursive-修改键和值
如何使用Php 数组\u walk\u recursive-修改键和值,php,Php,如何使用array\u walk\u recursive修改键和值 这里只对值进行编码 function _utf8_encode($arr){ array_walk_recursive($arr, 'utf8_enc'); return $arr; } function utf8_enc(&$value, &$key){ $value = utf8_encode($value); $key = utf8_encode($key); } ar
array\u walk\u recursive
修改键和值
这里只对值进行编码
function _utf8_encode($arr){
array_walk_recursive($arr, 'utf8_enc');
return $arr;
}
function utf8_enc(&$value, &$key){
$value = utf8_encode($value);
$key = utf8_encode($key);
}
array\u walk\u recursive
只对数组的值应用user函数,而不对索引应用user函数(我认为这与数组的索引必须是唯一的这一事实有关,因此您无法对它们进行操作)。最好是自己编写一个递归函数。以下方面应起作用:
function utf8enc($array) {
if (!is_array($array)) return;
$helper = array();
foreach ($array as $key => $value) $helper[utf8_encode($key)] = is_array($value) ? utf8enc($value) : utf8_encode($value);
return $helper;
}
$enc_array = utf8enc($your_array);
除了rabudde的答案之外,还有另一个递归函数:
function utf8_encode_array($array_to_encode=array()){
$encoded_array=array();
if(is_array($array_to_encode)){
foreach($array_to_encode as $key => $value){
$key=utf8_encode($key);
if(is_array($value)){
$encoded_array[$key]=utf8_encode_array($value);
}
else{
$encoded_array[$key]=utf8_encode($value);
}
}
}
return $encoded_array;
}
这是我的递归函数,它不仅可以将数组的值更改为array_walk_recursive(),还可以更改给定数组的键。它还保持数组的顺序
/**
*按照数组顺序递归地更改给定数组中的值和键。
*
*@param array$\原始数组。
*@param callable$\回调回调函数采用2个参数(键、值)
*并返回数组[newKey,newValue],如果没有更改,则返回null。
*
*@返回无效
*/
函数modifyArrayRecursive(数组和$\u数组,可调用$\u回调):void
{
$keys=\array\U keys($\U array);
foreach($keys为$keyIndex=>$key){
$value=&$_数组[$key];
if(\is_数组($value)){
modifyArrayRecursive($value,$\u回调);
继续;
}
$newKey=$key;
$newValue=$value;
$newPair=$\回调($key,$value);
如果($newPair!==null){
[$newKey,$newValue]=$newPair;
}
$keys[$keyIndex]=$newKey;
$\u数组[$key]=$newValue;
}
$\u数组=\array\u组合($键,$\u数组);
}
/**
*用法示例
*/
modifyArrayRecursive($keyboardArr,function($key,$value){
如果($value=='some value'){
返回['new_key_for_this_value',$value];
}
返回null;
});
函数不会正确修改嵌套数组键上的所有键。示例:['key1'=>['key2'=>['key3'=>'value']]]