我正在寻找一些标准的PHP函数来替换其他的数组值,但令人惊讶的是我没有找到任何值,所以我必须自己编写:
function array_replace_value(&$ar, $value, $replacement)
{
if (($key = array_search($ar, $value)) !== FALSE) {
$ar[$key] = $replacement;
}
}
但是我仍然想知道 - 对于这么简单的事情必须已经有了一些功能!或者也许比我发明的更容易解决方案?
请注意,此功能只会进行一次更换。我正在寻找类似替换单个事件的现有解决方案,以及替换所有事件的解决方案。
答案 0 :(得分:27)
而不是仅替换数组中某个值的出现的函数,而是更通用的array_map
:
array_map(function ($v) use ($value, $replacement) {
return $v == $value ? $replacement : $v;
}, $arr);
使用value =>数组替换多个值的多次出现替换:
array_map(function ($v) use ($replacement) {
return isset($replacement[$v]) ? $replacement[$v] : $v;
}, $arr);
要替换单个值的一个值,您可以像使用array_search
一样。由于实现很短,因此PHP开发人员没有太多理由创建标准函数来执行任务。如果您发现自己经常需要它,那并不是说创建这样一个函数没有意义。
答案 1 :(得分:25)
虽然没有一个函数等效于示例代码,但您可以使用array_keys
(使用可选的搜索值参数),array_fill
和array_replace
来实现相同的功能:
Tomas编辑:代码无效,纠正了它:
$ar = array_replace($ar,
array_fill_keys(
array_keys($ar, $value),
$replacement
)
);
答案 2 :(得分:6)
尝试此功能。
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;
}
干杯!
答案 3 :(得分:6)
如果性能有问题,可以考虑不在array_map()
内创建多个功能。请注意isset()
非常快,此解决方案根本不会调用任何其他函数。
$replacements = array(
'search1' => 'replace1',
'search2' => 'replace2',
'search3' => 'replace3'
);
foreach ($a as $key => $value) {
if (isset($replacements[$value])) {
$a[$key] = $replacements[$value];
}
}
答案 4 :(得分:3)
带回调的array_walk()
呢?
$array = ['*pasta', 'cola', 'pizza'];
$search = '*';
$replace = '\*';
array_walk($array,
function (&$v) use ($search, $replace){
$v = str_replace($search, $replace, $v);
}
);
print_r($array);
答案 5 :(得分:2)
根据您要查找和替换的值,键或两者,您可以执行以下操作:
$array = json_decode( str_replace( $replace, $with, json_encode( $array ) ), true );
我不是说这是最有效或最优雅的,但又好又简单。
答案 6 :(得分:1)
根据Deept Raghav
的答案,我创建了以下解决方案,进行正则表达式搜索。
$arr = [
'Array Element 1',
'Array Element 2',
'Replace Me',
'Array Element 4',
];
$arr = array_replace(
$arr,
array_fill_keys(
array_keys(
preg_grep('/^Replace/', $arr)
),
'Array Element 3'
)
);
echo '<pre>', var_export($arr), '</pre>';
PhpFiddle:http://phpfiddle.org/lite/code/un7u-j1pt
答案 7 :(得分:0)
<b>$green_key = array_search('green', $input); // returns the first key whose value is 'green'
$ input [$ green_key] ='apple'; //用'apple'替换'green'
答案 8 :(得分:0)
$ar[array_search('green', $ar)] = 'value';
答案 9 :(得分:0)
PHP 8,将一个字符串值替换为另一个字符串值的严格版本:
array_map(static fn (string $value): string => $value === $find ? $replace : $value, $array);
示例 - 将值 foo
替换为 bar
:
array_map(static fn (string $value): string => $value === 'foo' ? 'bar' : $value, $array);