在PHP数组中,如何基于数组值修改字符串键?
目前,我正在对数组进行foreach,并在执行时创建一个新数组。例如:在PHP数组中,如何基于数组值修改字符串键?,php,arrays,Php,Arrays,目前,我正在对数组进行foreach,并在执行时创建一个新数组。例如: $newMap = []; foreach ($oldMap as $key => $value) { // Apply some complex logic to $value to extract a string $newString = my_value_processor($value); $newkey = $key + $newStrin
$newMap = [];
foreach ($oldMap as $key => $value) {
// Apply some complex logic to $value to extract a string
$newString = my_value_processor($value);
$newkey = $key + $newString;
$newMap[$newKey] = $value;
}
我有一种感觉,我应该能够用array\u map或array\u walk来完成这项工作,而且它会更有效,但我似乎无法让它工作
编辑:在上面的示例中,代码被简化为显示$newKey依赖于$value。$value是一个子数组,我对它应用了一些复杂的逻辑来提取字符串。我已经更新了上面的示例来演示这一点。如果您想修改数组值,可以使用array\u map。请注意此处使用的匿名函数,可从PHP7获得 使用数组映射修改数组值 结果:
array(3) {
["k1"]=>
string(2) "1_"
["k2"]=>
string(2) "2_"
["k3"]=>
string(2) "3_"
}
array(3) {
["1_"]=>
string(1) "1"
["2_"]=>
string(1) "2"
["3_"]=>
string(1) "3"
}
如果要修改数组键或值或两者,可以使用array\u reduce
使用array\u reduce修改数组键
结果:
array(3) {
["k1"]=>
string(2) "1_"
["k2"]=>
string(2) "2_"
["k3"]=>
string(2) "3_"
}
array(3) {
["1_"]=>
string(1) "1"
["2_"]=>
string(1) "2"
["3_"]=>
string(1) "3"
}
但从我的观点来看,这是编程的函数式风格,这不是php的典型风格,所以我认为您的foreach方法更好 试试这段代码,这段代码带有array\u walk
$newMap = [];
array_walk($oldMap, function ($value,$key) use (&$newMap) {
$newkey = $key + $value + 'blah blah blah';
$newMap[$newkey] = $value;
});
如果您将字符串用作'blah blah blah',则将+plus替换为.dot。您可以这样尝试
$oldMap = ['test12' => 'test'];
foreach($oldMap as $key => $value)
{
$oldMap[$key.'_'.$value.'blah blah'] = $value;
unset($oldMap[$key]);
}
var_dump($oldMap);
IIRC,foreach比数组函数快得多。让我找一个来源来支持这一点。编辑找到我的源:。这取决于具体的操作,但如果您没有函数式编程方面的背景,foreach总是更快,可能更容易阅读。可能与否重复,您无法在现有的Php数组中变异键。foreach$old as$k=>$v$new[$k.''.'$v]=$v;举个例子,不是很难吗?不能使用+运算符合并字符串,请使用。对于连接,他不想更改值。谢谢,有一个add array\u reduce,允许修改键