Dodaj prefiks do każdej pozycji tablicy PHP

Mam tablicę liczb PHP, którą chciałbym przedrostek z minusem ( -). Myślę, że poprzez użycie explode i implode byłoby to możliwe, ale moja znajomość php nie jest w stanie tego zrobić. Każda pomoc będzie mile widziana.

Zasadniczo chciałbym przejść od tego:

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

Do tego:

$array = [-1, -2, -3, -4, -5];
Jakieś pomysły?
Author: Dávid Horváth, 2011-10-01

6 answers

Proste

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

Chyba że tablica jest ciągiem znaków:

foreach ($array as &$value) {
    $value = '-'.$value;
}
unset($value);
 86
Author: Rohit Chopra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-19 20:48:36

Elegancki sposób na prefiks wartości tablicy (PHP 5.3+):

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

Dodatkowo, jest to ponad trzy razy szybsze niż foreach.

 84
Author: Dávid Horváth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-23 17:51:22

W tym przypadku, odpowiedź Rohita {[10] } jest prawdopodobnie najlepsza, ale funkcje tablicy PHP mogą być bardzo przydatne w bardziej złożonych sytuacjach.

Możesz użyć array_walk() aby wykonać funkcję na każdym elemencie tablicy zmieniającą istniejącą tablicę. array_map() robi prawie to samo, ale zwraca nową tablicę zamiast modyfikować istniejącą, ponieważ wygląda na to, że chcesz nadal używać tej samej tablicy, powinieneś użyć array_walk().

To pracować bezpośrednio na elementach tablicy z array_walk(), przekazuje elementy tablicy przez referencję (function(&$item)).

Od php 5.3 możesz użyć funkcji anonimowej w array_walk:

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

Przykład roboczy

Jeśli php 5.3 jest dla ciebie trochę zbyt wyszukane, po prostu użyj createfunction():

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

Przykład roboczy

 62
Author: Peter Ajtai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:15

Coś takiego by się przydało:

array_map(function($val) { return -$val;} , $array)
 20
Author: JRL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-01 01:55:10
$array = "1, 2, 3, 4";
$array = explode( ',', $array );
foreach ($array as &$value){
    $value = '-' . trim($value);
}
$array = implode(', ', $array);   //output "-1, -2, -3, -4"
 4
Author: BomAle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-21 04:31:10
$array = [1, 2, 3, 4, 5];
$array=explode(",", ("-".implode(",-", $array)));
//now the $array is your required array
 0
Author: SarwarCSE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 13:02:07