为PHP数组的每个项添加前缀

MBL*_*MBL 68 php arrays explode prefix implode

我有一个PHP数组,我想在前面添加一个减号( - ).我认为通过使用爆炸和内爆它是可能的,但我的PHP知识是不可能实际做到的.任何帮助,将不胜感激.

基本上我想从这个:

$array = [1, 2, 3, 4, 5];
Run Code Online (Sandbox Code Playgroud)

对此:

$array = [-1, -2, -3, -4, -5];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dáv*_*áth 124

一种优雅的数组值前缀方式(PHP 5.3+):

$prefixed_array = preg_filter('/^/', 'prefix_', $array);
Run Code Online (Sandbox Code Playgroud)

此外,这比a快三倍以上foreach.

  • @Avik要添加后缀,只需使用`$`anchor:`preg_filter('/ $ /','_ suffix',$ array);` (11认同)
  • 我发现这是最好的答案,主要是它的速度要快得多.另外值得一提的是[`preg_replace`](http://php.net/manual/en/function.preg-replace.php),它大致相同,但它总是返回一个相同大小的数组,其中包含未修改的项目与正则表达式不匹配的项目.它在版本要求上也有点轻松(存在于PHP4与`preg_filter`中,需要PHP> = 5.3.0). (6认同)
  • 谢谢,我想出了`preg_filter('/^(.*?)$/', '$0*', $array)`,它确实有效,但我喜欢你的,它很短。再次感谢非常感谢您的帮助:) (2认同)

Roh*_*pra 93

简单

foreach ($array as &$value) {
   $value *= (-1);
}
unset($value);
Run Code Online (Sandbox Code Playgroud)

除非数组是一个字符串:

foreach ($array as &$value) {
    $value = '-' . $value;
}
unset($value);
Run Code Online (Sandbox Code Playgroud)

  • @Peter Ajtai Essential,也很危险.您应该始终停用引用的变量:`foreach($ array as&$ value){/*...*/} unset($ value);`. (5认同)
  • @mgutt因为PHP没有块级变量作用域.如果稍后在代码中使用具有相同名称的变量,它将会神奇地覆盖引用变量的内容. (4认同)
  • 尼斯.通过引用传递是必不可少的. (3认同)

Pet*_*tai 66

在这种情况下,Rohit的答案可能是最好的,但PHP数组函数在更复杂的情况下非常有用.

您可以使用array_walk()在更改现有数组的数组的每个元素上执行函数.array_map()做几乎相同的事情,但它返回一个新的数组,而不是修改现有的数组,因为它看起来像你想继续使用相同的数组,你应该使用array_walk().

要直接使用数组的元素,array_walk()通过引用(function(&$item))传递数组的项.

从php 5.3开始,你可以在array_walk中使用匿名函数:

// PHP 5.3 and beyond!
array_walk($array, function(&$item) { $item *= -1; }); // or $item = '-'.$item;
Run Code Online (Sandbox Code Playgroud)

工作实例

如果php 5.3对你来说有点太花哨,只需使用createfunction():

// If you don't have PHP 5.3
array_walk($array,create_function('&$it','$it *= -1;')); //or $it = '-'.$it;
Run Code Online (Sandbox Code Playgroud)

工作实例

  • 对于简单数字,循环可能更快.简介:)在我的情况下,我需要在连接整个数组之前为字符串添加前缀,最快的解决方案是Array_walk,然后是Implode. (2认同)

JRL*_*JRL 20

这样的事情会做:

array_map(function($val) { return -$val;} , $array)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这只是PHP 5.3+(由于匿名函数),并且它返回一个新数组而不是修改现有数组(因此`print_r($ array)`会在上面之后显示`$ array`不变.你将返回的值分配给`$ array`,这样就可以很好地完成工作. (3认同)

Dan*_*ick 8

您可以用字符串替换“无”。因此,要为字符串数组(而不是最初发布的数字)添加前缀:

$prefixed_array = substr_replace($array, 'your prefix here', 0, 0);
Run Code Online (Sandbox Code Playgroud)

这意味着,对于 $array 的每个元素,取偏移量 0 处的(零长度)字符串,长度为 0 并将其替换为前缀。

参考:substr_replace


Sar*_*CSE 6

$array = [1, 2, 3, 4, 5];
$array=explode(",", ("-".implode(",-", $array)));
//now the $array is your required array
Run Code Online (Sandbox Code Playgroud)

  • 如果任何数组内容包含`,`,则结果数组将比原始数组具有更多项。这确实适用于它只是数字的 OP 情况。 (3认同)

Man*_*n.A 5

我以前也有过同样的情况。

为每个数组值添加前缀

function addPrefixToArray(array $array, string $prefix)
{
    return array_map(function ($arrayValues) use ($prefix) {
        return $prefix . $arrayValues;
    }, $array);
}
Run Code Online (Sandbox Code Playgroud)

为每个数组值添加后缀

function addSuffixToArray(array $array, string $suffix)
{
    return array_map(function ($arrayValues) use ($suffix) {
        return $arrayValues . $suffix;
    }, $array);
}
Run Code Online (Sandbox Code Playgroud)

现在测试部分:

$array = [1, 2, 3, 4, 5];
Run Code Online (Sandbox Code Playgroud)

print_r(addPrefixToArray($array, 'prefix'));

结果

Array ([0] => prefix1 [1] => prefix2 [2] => prefix3 [3] => prefix4 [4] => prefix5)
Run Code Online (Sandbox Code Playgroud)

print_r(addSuffixToArray($array, 'suffix'));

结果

Array ([0] => 1suffix [1] => 2suffix [2] => 3suffix [3] => 4suffix [4] => 5suffix)
Run Code Online (Sandbox Code Playgroud)