27

I have the following array in php:

$a = [0, 4, 5, 7];

I would like to increment all the values without writing a loop (for, foreach...)

// increment all values
// $a is now array(1, 5, 6, 8)

Is it possible in php?

And by extention, is it possible to call a function on each element and replace that element by the return value of the function?

For example:

$a = doubleValues($a); // array(0, 8, 10, 14)
1
  • You could use array_walk(). But that's still a loop internally, even if you don't note the for or foreach yourself. Commented Oct 2, 2012 at 13:30

3 Answers 3

66

This is a job for array_map() (which will loop internally):

$a = array(0, 4, 5, 7);
// PHP 5.3+ anonmymous function.
$output = array_map(function($val) { return $val+1; }, $a);

print_r($output);
Array
(
    [0] => 1
    [1] => 5
    [2] => 6
    [3] => 8
)

Edit by OP:

function doubleValues($a) {
  return array_map(function($val) { return $val * 2; }, $a);
}
Sign up to request clarification or add additional context in comments.

Comments

9

Yeah this is possible using the PHP function array_map() as mentioned in the other answers.This solutions are completely right und useful. But you should consider, that a simple foreach loop will be faster and less memory intense. Furthermore it grants a better readability for other programmers and users. Nearly everyone knows, what a foreach loop is doing and how it works, but most PHP users are not common with the array_map() function.

Comments

1
$arr = array(0, 4, 5, 7);
function val($val) { return $val+1; }
$arr = array_map( 'val' , $arr );
print_r( $arr );

See it here

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.