Reputation: 185
I have an array structure like the following:
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
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
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
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
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