Steven

Mercatante

Steven Mercatante

A better way to combine PHP arrays

I recently had a use case where I needed to combine two arrays in PHP…

<?php
$people = ['Bob', 'Frank'];
$ages = [23, 54];

… to end up with an array that looked like this:

<?php
Array(
  [0] => Array(
    [0] => Bob
    [1] => 23
  )

  [1] => Array(
    [0] => Frank
    [1] => 54
  )
)

In python, I’d just use the zip function - I wanted something similar in PHP. The solution was to pass null as the first argument to array_map:

<?php
$people = array_map(null, $people, $ages);

For comparison’s sake, here’s how you’d achieve this without using array_map:

<?php
$tmp_people = [];
foreach ($people as $k => $v) {
  $tmp_people[] = [$v, $ages[$k]];
}
$people = $tmp_people;

PHP is far from a functional programming language when compared to the likes of Clojure, Erlang, Haskell or even python, but functional tools like array_map can make everyday tasks easier.