PHP - 合并重复的数组键多维数组 [英] PHP - Merge duplicate array keys in a multidimensional array

查看:200
本文介绍了PHP - 合并重复的数组键多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个多维数组名为$歌曲,它输出以下内容:

 阵列

    [0] =>排列
        (
            [迈克尔·杰克逊] =>惊悚
        )    [1] =>排列
        (
            [迈克尔·杰克逊] =>和你一起嗨
        )    [2] =>排列
        (
            [泰迪彭德格拉斯] =>爱TKO
        )    [3] =>排列
        (
            [ACDC] =>早在黑
        )

我想合并具有重复键的阵列,这样我就可以得到如下:

 阵列

    [0] =>排列
        (
            [迈克尔·杰克逊] =>排列
            (
                [0] =>惊悚
                [1] =>和你一起嗨
            )
        )    [1] =>排列
        (
            [泰迪彭德格拉斯] =>爱TKO
        )    [2] =>排列
        (
            [ACDC] =>早在黑
        )

我如何做到这一点?

给我的code输出数组像加分点:

 < H2>迈克尔·杰克逊< / H>
< UL>
<立GT;惊悚< /李>
<立GT;惊悚< /李>
< / UL>< H2>泰迪彭德格拉斯< / H>
< UL>
<立GT;爱TKO< /李>
< / UL>< H2>&ACDC LT; / H>
< UL>
<立GT;早在黑色< /李>
< / UL>


解决方案

这应该这样做,这是不是你想要什么,但我没有看到一个原因,你需要的索引结果数组数字,然后由艺术家。

  $源=阵列(
    阵列('迈克尔·杰克逊'=>'惊悚'),
    阵列('迈克尔·杰克逊'=>'你一起摇滚),
    阵列('泰迪彭德格拉斯'=>爱TKO),
    阵列('ACDC'=>回到黑色)
);$结果=阵列();的foreach($源作为$项目){
    $艺术家=键($项目);
    $专辑=电流($项目);    如果(!使用isset($结果[$艺术家])){
        $结果[$艺术家] =阵列();
    }
    $结果[$艺术家] [] = $专辑;
}

您可以循环 $结果数组,建立自己的HTML是这样的:

 的foreach($结果为$艺术家=> $专辑){
    呼应'< H2>'$艺术家。'< / H>';
    呼应'< UL>';
    的foreach($专辑为$专辑){
        呼应'<立GT;'$专辑。'< /李>';
    }
    呼应'< / UL>';
}

这将导致你所描述的类似名单。

I have a multidimensional array called $songs, which outputs the following:

Array
(
    [0] => Array
        (
            [Michael Jackson] => Thriller
        )

    [1] => Array
        (
            [Michael Jackson] => Rock With You
        )

    [2] => Array
        (
            [Teddy Pendergrass] => Love TKO
        )

    [3] => Array
        (
            [ACDC] => Back in Black
        )
)

I would like to merge the arrays which have duplicate keys, so I can get the following:

Array
(
    [0] => Array
        (
            [Michael Jackson] => Array
            (
                [0] => Thriller
                [1] => Rock With You
            )
        )

    [1] => Array
        (
            [Teddy Pendergrass] => Love TKO
        )

    [2] => Array
        (
            [ACDC] => Back in Black
        )
)

How do I do this?

Bonus points for giving me the code to output the array like:

<h2>Michael Jackson</h2>
<ul>
<li>Thriller</li>
<li>Thriller</li>
</ul>

<h2>Teddy Pendergrass</h2>
<ul>
<li>Love TKO</li>
</ul>

<h2>ACDC</h2>
<ul>
<li>Back in Black</li>
</ul>

解决方案

This should do it, it's not exactly what you want but I don't see a reason why you'd need to index the resulting array numerically, and then by artist.

$source = array(
    array('Michael Jackson' => 'Thriller'),
    array('Michael Jackson' => 'Rock With You'),
    array('Teddy Pendergrass' => 'Love TKO'),
    array( 'ACDC' => 'Back in Black')
);

$result = array();

foreach($source as $item) {
    $artist = key($item);
    $album = current($item);

    if(!isset($result[$artist])) {
        $result[$artist] = array();
    }
    $result[$artist][] = $album;
}

And you can loop the $result array and build your HTML like this:

foreach($result as $artist => $albums) {
    echo '<h2>'.$artist.'</h2>';
    echo '<ul>';
    foreach($albums as $album) {
        echo '<li>'.$album.'</li>';
    }
    echo '</ul>';
}

Which would result in a similar list that you described.

这篇关于PHP - 合并重复的数组键多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆