12

I've got an array like this:

Array
(
    [0] => Array
        (
            [name] => Something
        )

    [1] => Array
        (
            [name] => Something else
        )

    [2] => Array
        (
            [name] => Something else....
        )
)

Is there a simple way of imploding the values into a string, like this:

echo implode(', ', $array[index]['name']) // result: Something, Something else, Something else...

without using a loop to concate the values, like this:

foreach ($array as  $key => $val) {
    $string .= ', ' . $val;
}
$string = substr($string, 0, -2); // Needed to cut of the last ', '
mickmackusa
  • 43,625
  • 12
  • 83
  • 136
qwerty
  • 575
  • 3
  • 6
  • 8

3 Answers3

28

Simplest way, when you have only one item in inner arrays:

$values = array_map('array_pop', $array);
$imploded = implode(',', $values);

EDIT: It's for version before 5.5.0. If you're above that, see better answer below :)

Radek Benkel
  • 8,278
  • 3
  • 32
  • 41
23

In PHP 5 >= 5.5.0

implode(', ', array_column($array, 'name'))
Oleg Matei
  • 866
  • 13
  • 9
18

You can use a common array_map() trick to "flatten" the multidimensional array then implode() the "flattened" result, but internally PHP still loops through your array when you call array_map().

function get_name($i) {
    return $i['name'];
}

echo implode(', ', array_map('get_name', $array));
BoltClock
  • 700,868
  • 160
  • 1,392
  • 1,356
  • 1
    Yeah, but PHP does it much faster. Thanks. – qwerty Jan 31 '11 at 18:26
  • 2
    This would be preferably to using array_pop(). If your 2nd tier array is given additional keys, it is not guaranteed the "name" key will be the first in the stack. Defensive programming FTW. – John Cartwright Jan 31 '11 at 18:49
  • 2
    On another note, if you are skeptical about creating a new function in the namespace, then either use closures or create_function. echo implode(', ', array_map(create_function('$a', 'return $a["name"];'), $array)); – John Cartwright Jan 31 '11 at 18:53
  • You've got a very good point regarding your second comment, but in this case singles solution will do just fine. And yes, i am a bit skeptical about creating functions for this kind of usage. You see, i'm in the middle of learning OOP, so i'm kind of confused about when and where to use "normal" functions. Your last comment solved that though. I wish i could accept two posts. – qwerty Jan 31 '11 at 19:51