Добавьте префикс к каждому элементу массива PHP


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

по существу я хотел бы пойти от этого:

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

для этого:

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

какие идеи?

6 55

6 ответов:

простой

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

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

foreach ($array as &$value) {
    $value = '-'.$value;
}
unset($value);

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

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

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

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

рабочая пример

что-то вроде этого будет делать:

array_map(function($val) { return -$val;} , $array)
$array = "1, 2, 3, 4";
$array = explode( ',', $array );
foreach ($array as &$value){
    $value = '-' . trim($value);
}
$array = implode(', ', $array);   //output "-1, -2, -3, -4"
$array = [1, 2, 3, 4, 5];
$array=explode(",", ("-".implode(",-", $array)));
//now the $array is your required array