TMS*_*TMS 29 php arrays replace
我正在寻找一些标准的PHP函数来替换一些数组的值,但令人惊讶的是我没有找到任何,所以我必须自己编写:
function array_replace_value(&$ar, $value, $replacement)
{
if (($key = array_search($ar, $value)) !== FALSE) {
$ar[$key] = $replacement;
}
}
Run Code Online (Sandbox Code Playgroud)
但我仍然想知道 - 对于这么简单的事情,它必须已经有了一些功能!或者可能比我发明的更容易解决方案?
请注意,此功能只会进行一次更换.我正在寻找类似替换单个事件的现有解决方案,以及替换所有事件的解决方案.
out*_*tis 29
而不是只替换数组中一个值的出现的函数,而是更通用的array_map:
array_map(function ($v) use ($value, $replacement) {
return $v == $value ? $replacement : $v;
}, $arr);
Run Code Online (Sandbox Code Playgroud)
要使用value => replacement数组替换多个值的多次出现:
array_map(function ($v) use ($replacement) {
return isset($replacement[$v]) ? $replacement[$v] : $v;
}, $arr);
Run Code Online (Sandbox Code Playgroud)
要替换单个值的一个值,您可以array_search像使用一样.由于实现很短,因此PHP开发人员没有太多理由创建标准函数来执行任务.如果您发现自己经常需要它,那并不是说创建这样的函数没有意义.
Dee*_*hav 27
虽然没有一个函数等效于示例代码,但您可以使用array_keys(使用可选的搜索值参数),array_fill并array_replace实现相同的功能:
由Tomas编辑:代码无效,纠正了它:
$ar = array_replace($ar,
array_fill_keys(
array_keys($ar, $value),
$replacement
)
);
Run Code Online (Sandbox Code Playgroud)
如果性能是一个问题,可以考虑不在其中创建多个功能array_map().请注意,isset()速度极快,此解决方案根本不会调用任何其他功能.
$replacements = array(
'search1' => 'replace1',
'search2' => 'replace2',
'search3' => 'replace3'
);
foreach ($a as $key => $value) {
if (isset($replacements[$value])) {
$a[$key] = $replacements[$value];
}
}
Run Code Online (Sandbox Code Playgroud)
试试这个功能.
public function recursive_array_replace ($find, $replace, $array) {
if (!is_array($array)) {
return str_replace($find, $replace, $array);
}
$newArray = [];
foreach ($array as $key => $value) {
$newArray[$key] = recursive_array_replace($find, $replace, $value);
}
return $newArray;
}
Run Code Online (Sandbox Code Playgroud)
干杯!