Добавьте префикс к каждому элементу массива PHP - PullRequest
64 голосов
/ 01 октября 2011

У меня есть массив чисел PHP, который я хотел бы поставить с префиксом минус (-). Я думаю, что с помощью взрыва и взрыва это было бы возможно, но мои знания php не позволяют это сделать. Любая помощь будет оценена.

По сути, я хотел бы перейти от этого:

$array = [1, 2, 3, 4, 5];

к этому:

$array = [-1, -2, -3, -4, -5];

Есть идеи?

Ответы [ 7 ]

112 голосов
/ 23 января 2015

Элегантный способ префикса значений массива (PHP 5.3 +):

$prefixed_array = preg_filter('/^/', 'prefix_', $array);

Кроме того, это более чем в три раза быстрее, чем foreach.

92 голосов
/ 01 октября 2011

Simple:

foreach ($array as &$value) {
   $value *= (-1);
}
unset($value);

Если массив не является строкой:

foreach ($array as &$value) {
    $value = '-' . $value;
}
unset($value);
65 голосов
/ 01 октября 2011

В этом случае ответ Рохита , вероятно, лучший, но функции массива 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;

Рабочий пример

Если php 5.3 слишком модныйВы просто используете createfunction():

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

Рабочий пример

20 голосов
/ 01 октября 2011

Примерно так:

array_map(function($val) { return -$val;} , $array)
3 голосов
/ 26 сентября 2016
$array = [1, 2, 3, 4, 5];
$array=explode(",", ("-".implode(",-", $array)));
//now the $array is your required array
1 голос
/ 25 апреля 2019

Вы можете заменить «ничто» строкой.Таким образом, для префикса массива строк (не чисел, как первоначально было отправлено):

$prefixed_array = substr_replace($array, 'your prefix here', 0, 0);

Это означает, что для каждого элемента $ the_array возьмите строку (нулевой длины) со смещением 0, длиной 0 и заменитеэто префикс.

Ссылка: substr_replace

0 голосов
/ 17 апреля 2019

У меня была такая же ситуация раньше.

Добавление префикса к каждому значению массива

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)
...