tristanojbacon tristanojbacon - 4 months ago 29
SQL Question

How to implode an ASSOC array in PHP

I have the following mysqli query, and I want to implode the array that's outputted into a

(1,2,3,4)
type format.

Here's the query and the asoc array code:

$user_categories = mysqli_query($connect, "SELECT sub_cat FROM subscriptions WHERE sub_user_id = '$user_id'");

$category_ids = mysqli_fetch_all($user_categories,MYSQLI_NUM);

print_r($category_ids);

$category_ids = implode(", ",$category_ids);


I then get the following output, and I can't seem to isolate the values...

Array (
[0] => Array ( [0] => 5 )
[1] => Array ( [0] => 8 )
[2] => Array ( [0] => 4 )
[3] => Array ( [0] => 2 )
)


Apologies if I'm missing something really obvious here. I've been trying to fix this for a while, and due to my lack of PHP experience, I'm not 100% sure what to search for.

I've also tried a simple implode using the results of the
$user_categories
query, following the instructions of other StackExchange answers I've seen on the topic, but got nothing (code below):

$user_categories = mysqli_query($connect, "SELECT sub_cat FROM subscriptions WHERE sub_user_id = '$user_id'");

$category_ids = implode(", ",$user_categories);

echo $category_ids;

Answer

$category_ids is an array of arrays (rows), so you can't just implode it. You need to fetch the first value from each row and implode that.

PHP 5.5+ solution:

Using array_column():

$category_ids = implode(', ', array_column($category_ids, 0));

echo $category_ids;

Output:

5, 8, 4, 2

PHP 5.3+ solution:

Subtitute array_map() for array_column():

$category_ids = implode(', ', array_map(function ($row) { return $row[0]; }, $category_ids));

echo $category_ids;

Output:

5, 8, 4, 2

Comments