目前我正在对阵列进行foreach
,并在我去的时候创建一个新阵列。例如:
$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_map()
或array_walk()
完成此任务,并且它会更有效率,但我似乎无法使其正常工作。
编辑:在上面的示例中,代码被简化以显示$ newKey依赖于$ value。实际,$ value是一个子数组,我应用一些复杂的逻辑来提取字符串。我已经更新了上面的例子来证明这一点。
答案 0 :(得分:0)
如果要修改数组值,可以使用array_map(注意这里使用的匿名函数,可以从PHP 7获得)
使用array_map
$array = array(
"k1" => "1",
"k2" => "2",
"k3" => "3",
);
$mapFunc = function($item) {
return $item . '_';
};
$newArray = array_map($mapFunc, $array);
var_dump($newArray);
结果:
array(3) {
["k1"]=>
string(2) "1_"
["k2"]=>
string(2) "2_"
["k3"]=>
string(2) "3_"
}
如果要修改数组键或值,可以使用array_reduce
使用array_reduce
$array = array(
"k1" => "1",
"k2" => "2",
"k3" => "3",
);
$reduceFunc = function($carry, $key) use ($array) {
$carry[$key . '_'] = $array[$key];
return $carry;
};
$newArray = array_reduce(
$array,
$reduceFunc,
[]
);
var_dump($newArray);
结果:
array(3) {
["1_"]=>
string(1) "1"
["2_"]=>
string(1) "2"
["3_"]=>
string(1) "3"
}
但是从我的观点来看,这是编程的功能风格,这对于php来说并不典型,所以我认为你的foreach
方法更好。
答案 1 :(得分:-1)
尝试此代码,此代码包含array_walk()。
$newMap = [];
array_walk($oldMap, function ($value,$key) use (&$newMap) {
$newkey = $key + $value + 'blah blah blah';
$newMap[$newkey] = $value;
});
如果您使用字符串作为'blah blah blah',则将“ + ”(加号)替换为“。”(点)。
答案 2 :(得分:-1)
你可以这样试试,
$oldMap = ['test12' => 'test'];
foreach($oldMap as $key => $value)
{
$oldMap[$key.'_'.$value.'blah blah'] = $value;
unset($oldMap[$key]);
}
var_dump($oldMap);