using implode for stdClass Objects in php [duplicate]
Asked Answered
G

3

13
foreach($categories as $category)
{
    print_r($category);
}

The code above gives me the following result.

stdClass Object
(
    [category_Id] => 4
    [category_Title] => cat 4
)
stdClass Object
(
    [category_Id] => 7
    [category_Title] => cat 7
)
stdClass Object
(
    [category_Id] => 6
    [category_Title] => cat 6
)

how can I use implode(', ' ) to get the following result:

cat 4, cat 7, cat 6

I used it, but I got an error

Guaco answered 30/11, 2013 at 6:42 Comment(1)
just create array of element with category_TitleSnorter
S
28

You can cast the object as an array.

implode(',',(array) $categories); 

For more information: Convert a PHP object to an associative array

Skat answered 27/10, 2015 at 0:51 Comment(2)
it works for array but not for object as OP requestedObala
You can indeed cast an object to array, but casting $categories and imploding the result does not make any sense. This answer is seemingly trying to concatenate the properties of a single object, as in implode(',', (array)$category), but that would produce '4,cat 4'.Prudie
C
24

Here's an alternative solution using array_map:

$str = implode(', ', array_map(function($c) {
    return $c->category_Title;
}, $categories));
Creuse answered 30/11, 2013 at 6:51 Comment(2)
@Skat you misunderstood the question. If you read carefully, $categories is already an array containing three stdClass elements which have two properties: category_Id and category_Title. He asked how to generate a new array of category titles (strings). Just casting $categories to an array wouldn't work.Creuse
@GuilhermeSehn indeed. I apologize.Skat
H
7

Try like

foreach($categories as $category)
{
    $new_arr[] = $category->category_Title;
}
$res_arr = implode(',',$new_arr);
print_r($res_arr);
Haycock answered 30/11, 2013 at 6:44 Comment(1)
oky but to for loop array will make your app slowly little bit, imagine it if you have more than 5000 recordsCordeelia

© 2022 - 2024 — McMap. All rights reserved.