ldj
ldj

Reputation: 185

How to indent an array into another in PHP

I have an array structure like the following:

enter image description here

I would like to have the elements keys, bi, media and offer under biz_id. Like this:

biz_id
 bi
 media
 offer
biz_id
...

My code is the following:

    foreach ($premiumContent as $targets=>$target)
{

    $finalResult[]["biz_id"] = $target->biz_id;

    foreach ($target->media as $media)
     {
        switch ($media->type_id)
        {
            case '1':
                $finalResult[]["info"] = $media->text;
            break;
            case '6':
                $finalResult[]["bi"] = $media->url;
            break; 
            case '4':
                $mediaGroup[] = array('link' => $media->url, 'descript' => $media->text);
            break;
            case '3':
                $offerGroup[] = array('link' => $media->url, 'descript' => $media->text);
            break; 
            default:
                echo '';
        }
    }
    $finalResult[]["media"] = $mediaGroup;
    $finalResult[]["offer"] = $offerGroup;
}

return $finalResult;

What can I do to group the keys underneath biz_id?

Thanks for the recommendations.

Upvotes: 0

Views: 120

Answers (4)

gview
gview

Reputation: 15361

Simple: make the biz_id the key of the array:

foreach ($premiumContent as $targets=>$target)
{

    foreach ($target->media as $media)
     {
        switch ($media->type_id)
        {
            case '1':
                $finalResult[$target->biz_id]["info"] = $media->text;
            break;
            case '6':
                $finalResult[$target->biz_id]["bi"] = $media->url;
            break; 
            case '4':
                $mediaGroup[] = array('link' => $media->url, 'descript' => $media->text);
            break;
            case '3':
                $offerGroup[] = array('link' => $media->url, 'descript' => $media->text);
            break; 
            default:
                echo '';
        }
    }
    $finalResult[$target->biz_id]["media"] = $mediaGroup;
    $finalResult[$target->biz_id]["offer"] = $offerGroup;
}

return $finalResult;

Upvotes: 1

MrWhite
MrWhite

Reputation: 45829

You need to create a sub-array with elements info, bi and media which are assigned to the biz_id key of the parent array. This code creates an intermediary result which is then assigned to another element of your $finalResult array at the end (assuming there is more than 1 biz_id 'group' of values returned, as hinted by your variable dump).

foreach ($premiumContent as $targets=>$target) {
    $interResult['biz_id'] = $target->biz_id;

    foreach ($target->media as $media) {
        switch ($media->type_id) {
            case '1':
                $interResult['biz_id']['info'] = $media->text;
                break;
            case '6':
                $interResult['biz_id']['bi'] = $media->url;
                break; 
            case '4':
                $interResult['biz_id']['media'] = array(
                    'link' => $media->url,
                    'descript' => $media->text,
                );
                break;
            case '3':
                $interResult['biz_id']['offer'] = array(
                    'link' => $media->url,
                    'descript' => $media->text,
                );
                break; 
            default:
                echo '';
        }
    }
    $finalResult[] = $interResult;
}

return $finalResult;

Upvotes: 0

micha
micha

Reputation: 11

I am Lazy

foreach ($premiumContent as $targets=>$target)
{

$finalResult[]["biz_id"] = $target->biz_id;
//<<my changes
foreach ($finalResult as $key => $val) 
{
}
$key;
//my changes>>

foreach ($target->media as $media)
{
    switch ($media->type_id)
    {
    case '1':
        $finalResult[]["info"] = $media->text;
    break;
    case '6':

//<<my changes
        $finalResult[$key]["bi"] = $media->url;

//my changes>>

    break; 
    case '4':
        $mediaGroup[] = array('link' => $media->url, 'descript' => $media->text);
    break;
    case '3':
        $offerGroup[] = array('link' => $media->url, 'descript' => $media->text);
    break; 
    default:
        echo '';
    }
}
//<<my changes
$finalResult[$key]["media"] = $mediaGroup;
$finalResult[$key]["offer"] = $offerGroup;
//my changes>>
}

return $finalResult;

Upvotes: 0

65Fbef05
65Fbef05

Reputation: 4522

Create each parent array using the biz_id as the array key. For example, your first switch case would look like $finalResult[$target->biz_id]["info"] = $media->text;. Then you could simply remove this line -> $finalResult[]["biz_id"] = $target->biz_id;

Upvotes: 1

Related Questions