问题描述
$ piper =| k = F | p = T |Ë= R | T = M |;
$ piper = explode(|,$ piper);
$ piper = array_filter($ piper);
function splitter(& $ value,$ key){
$ splitted = explode(=,$ value);
$ key = $ splitted [0];
$ value = $ splitted [1];
}
array_walk($ piper,'splitter');
var_dump($ piper);
这给了我
array(size = 4)
1 =>字符串'f'(长度= 1)
2 =>字符串't'(长度= 1)
3 =>字符串'r'(长度= 1)
4 =>字符串'm'(长度= 1)
我想要的:
array(size = 4)
k=>字符串'f'(长度= 1)
p=>字符串't'(长度= 1)
e=>字符串'r'(长度= 1)
t=>字符串'm'(长度= 1)
但密钥未改变。是否有任何数组函数,我可以循环一个数组,并更改键和值?
据说在的文档(描述回调函数):
这意味着你不能使用 array_walk
来改变迭代数组的键。然而,你可以用它创建一个新的数组:
pre $ code $ $ result = array();
array_walk($ piper,function(& $ value,$ key)use(& $ result){
$ splitted = explode(=,$ value);
$ result [$ splitted [0]] = $ splitted [1];
});
var_dump($ result);
不过,我认为如果是我, '在这里使用正则表达式(而不是爆炸爆炸):
$ piper =| k = f | p =吨|电子= R | T = M |;
preg_match_all('#([^ = |] *)=([^ |] *)#',$ piper,$ matches,PREG_PATTERN_ORDER);
$ piper = array_combine($ matches [1],$ matches [2]);
var_dump($ piper);
I am using array functions to convert my pipe delimited string to an associative array.
$piper = "|k=f|p=t|e=r|t=m|";
$piper = explode("|",$piper);
$piper = array_filter($piper);
function splitter(&$value,$key) {
$splitted = explode("=",$value);
$key = $splitted[0];
$value = $splitted[1];
}
array_walk($piper, 'splitter');
var_dump($piper);
this gives me
array (size=4)
1 => string 'f' (length=1)
2 => string 't' (length=1)
3 => string 'r' (length=1)
4 => string 'm' (length=1)
where i want:
array (size=4)
"k" => string 'f' (length=1)
"p" => string 't' (length=1)
"e" => string 'r' (length=1)
"t" => string 'm' (length=1)
but the keys are unaltered. Is there any array function with which i can loop over an array and change keys and values as well?
It's said in the documentation of array_walk (describing the callback function):
That means you cannot use array_walk
to alter the keys of iterated array. You can, however, create a new array with it:
$result = array();
array_walk($piper, function (&$value,$key) use (&$result) {
$splitted = explode("=",$value);
$result[ $splitted[0] ] = $splitted[1];
});
var_dump($result);
Still, I think if it were me, I'd use regex here (instead of "exploding the exploded"):
$piper = "|k=f|p=t|e=r|t=m|";
preg_match_all('#([^=|]*)=([^|]*)#', $piper, $matches, PREG_PATTERN_ORDER);
$piper = array_combine($matches[1], $matches[2]);
var_dump($piper);
这篇关于改变array_walk函数中的数组键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!