我在寻找一些标准的PHP函数来将数组的一些值替换为其他值,但令人惊讶的是,我没有找到任何值,所以我必须编写自己的函数:
function array_replace_value(&$ar, $value, $replacement)
{
if (($key = array_search($ar, $value)) !== FALSE) {
$ar[$key] = $replacement;
}
}
但我仍然想知道-对于这么简单的事情,肯定已经有了一些函数!或者可能比我发明的这个解决方案简单得多?
请注意,此函数只会进行一次替换。我正在寻找类似地替换单个事件的现有解决方案,以及那些替换所有事件的解决方案。
发布于 2011-12-29 22:09:39
虽然没有一个函数等同于示例代码,但您可以使用array_keys
(带有可选的搜索值参数)、array_fill
和array_replace
来实现相同的功能:
由Tomas编辑的:代码不工作,更正它:
$ar = array_replace($ar,
array_fill_keys(
array_keys($ar, $value),
$replacement
)
);
发布于 2011-12-29 22:19:09
与仅替换数组中出现的一个值的函数不同,这里有更通用的array_map
array_map(function ($v) use ($value, $replacement) {
return $v == $value ? $replacement : $v;
}, $arr);
要使用值数组=>替换来替换多次出现的多个值,请执行以下操作:
array_map(function ($v) use ($replacement) {
return isset($replacement[$v]) ? $replacement[$v] : $v;
}, $arr);
要替换一个值的单个匹配项,可以像以前一样使用array_search
。因为实现很短,所以PHP开发人员没有太多理由创建一个标准函数来执行任务。这并不是说,如果您发现自己经常需要这样一个函数,那么创建它对您来说就没有意义。
发布于 2015-09-01 08:12:04
如果性能是个问题,可以考虑不在array_map()
中创建多个函数。请注意,isset()
非常快,并且此解决方案根本不调用任何其他函数。
$replacements = array(
'search1' => 'replace1',
'search2' => 'replace2',
'search3' => 'replace3'
);
foreach ($a as $key => $value) {
if (isset($replacements[$value])) {
$a[$key] = $replacements[$value];
}
}
https://stackoverflow.com/questions/8668826
复制相似问题