我有一个PHP数字数组,我想在每个数字前加上负号(-)。我认为通过使用 explode 和 implode 可以实现,但我的php知识不足以实际操作。任何帮助将不胜感激。
本质上,我想从这个状态转变为:
$array = [1, 2, 3, 4, 5];
变成这样:
$array = [-1, -2, -3, -4, -5];
任何想法?一种优雅的方式来给数组值添加前缀(PHP 5.3+):
$prefixed_array = preg_filter('/^/', 'prefix_', $array);
此外,这比使用foreach
循环快三倍以上。
简单:
foreach ($array as &$value) {
$value *= (-1);
}
unset($value);
除非该数组是字符串:
foreach ($array as &$value) {
$value = '-' . $value;
}
unset($value);
foreach ($array as &$value){ /* ... */ } unset($value);
。 - Dávid Horvátharray_walk()
对数组的每个元素执行函数,从而改变现有数组。 array_map()
几乎做同样的事情,但它返回一个新数组而不是修改现有数组,因为看起来您想继续使用相同的数组,所以应该使用array_walk()
。array_walk()
。// PHP 5.3 and beyond!
array_walk($array, function(&$item) { $item *= -1; }); // or $item = '-'.$item;
如果对于您来说,php 5.3 太过花哨,那么只需使用 createfunction()
:
// If you don't have PHP 5.3
array_walk($array,create_function('&$it','$it *= -1;')); //or $it = '-'.$it;
可以像这样做:
array_map(function($val) { return -$val;} , $array)
print_r($array)
会显示$array
没有变化)。如果你将返回值赋给$array
,这将非常好地完成任务。 - Peter Ajtai$prefixed_array = substr_replace($array, 'your prefix here', 0, 0);
这意味着,对于$array的每个元素,在偏移量0、长度为0的位置上取空字符串,并用前缀替换它。$array = [1, 2, 3, 4, 5];
$array=explode(",", ("-".implode(",-", $array)));
//now the $array is your required array
我之前也遇到了相同的情况。
function addPrefixToArray(array $array, string $prefix)
{
return array_map(function ($arrayValues) use ($prefix) {
return $prefix . $arrayValues;
}, $array);
}
function addSuffixToArray(array $array, string $suffix)
{
return array_map(function ($arrayValues) use ($suffix) {
return $arrayValues . $suffix;
}, $array);
}
$array = [1, 2, 3, 4, 5];
print_r(addPrefixToArray($array, 'prefix'));
Array ([0] => prefix1 [1] => prefix2 [2] => prefix3 [3] => prefix4 [4] => prefix5)
print_r(addSuffixToArray($array, 'suffix'));
Array ([0] => 1suffix [1] => 2suffix [2] => 3suffix [3] => 4suffix [4] => 5suffix)
preg_replace
,它做的事情大致相同,但它总是返回一个大小相同的数组,对于不匹配正则表达式的项,返回未修改的项。它在版本要求方面也比较轻(存在于PHP4中,而preg_filter
要求PHP版本 >= 5.3.0)。 - dbm$
锚点:preg_filter('/$/', '_后缀', $array);
- Dávid Horváthpreg_filter('/^(.*?)$/', '$0*', $array)
,它确实有效,但我喜欢你的方法,更简洁。再次感谢您的帮助 :) - AvikBpreg_replace
的方法。 - Luu Hoang Bac