如何在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.

我的数组结构如下: p>

p>

我想要元素键,bi,媒体和 在biz_id下提供。 像这样: p>

  biz_id 
 bi 
 media 
 offer 
biz_id 
 ... 
  code>  pre> 
 
 

我的代码如下: p>

  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  ;  
案例'4':
 $ mediaGroup [] = array('link'=> $ media-> url,'descript'=> $ media-> text); 
 break; 
 case  '3':
 $ offerGroup [] = array('link'=> $ media-> url,'descript'=> $ media-> text); 
 break;  
默认:
 echo''; 
} 
} 
 $ finalResult [] [“media”] = $ mediaGroup; 
 $ finalResult [] [“offer”] = $ offerGroup; 
} \  n 
return $ finalResult; 
  code>  pre> 
 
 

如何对biz_id下面的键进行分组? p>

感谢您的建议。 p> div>

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;

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;

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;

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;