php - 在 PHP 数组中,如何根据数组值修改字符串键?
问题描述
目前我正在做一个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 是一个子数组,我对其应用了一些复杂的逻辑来提取一个字符串。我已经更新了上面的例子来证明这一点。
解决方案
如果你想修改数组值,你可以使用 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
方法更好。
推荐阅读
- docker - docker supervisord cron 工作不工作
- python - Pandas DataFrame,1、2、3 和 NaN 值的默认数据类型
- c# - 如何在 Unity 中 EncodeToPng 压缩纹理
- python - “字符串索引超出范围”Python 错误
- python - 更新 matplotlib 散点图数据
- apache-spark - Apache Spark:运行命令从 HDFS 读取文件时出错
- python - 根据指定列对其他列进行排序
- python - Python Pivot 丢失最后一列
- google-cloud-platform - 在 BigQuery 上插入行:InsertAllRequest 与 BigQueryIO.writeTableRows()
- excel - 根据另一张纸上的顺序 # 从一张纸中查找列值