PHP如何删除多维数组中的重复值并合并其他值 [英] PHP How to remove duplicate value in multidimensional array and merge others

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

问题描述

我已经花了几个小时解决这个问题. 我有一个包含字体详细信息的多维数组,我想将其合并以向Google Web字体发送一个请求. (每个数组描述不同html标签的字体详细信息)有人可以帮助我吗?

I've spend couple of hours on this problem. I have a multidimension array with fonts details and I want to merge it to send one request to google web fonts. (Each array describe font details of different html tag) Anyone can help me with that?

输入:

Array
(
[1] => Array
    (
        [family] => Abril Fatface
        [weight] => regular
        [charset] => latin,latin-ext
    )

[2] => Array
    (
        [family] => Akronim
        [weight] => regular
        [charset] => latin
    )

[3] => Array
    (
        [family] => Akronim
        [weight] => regular, bold
        [charset] => latin
    )

[4] => Array
    (
        [family] => Akronim
        [weight] => regular
        [charset] => latin, latin-ext
    )

[5] => Array
    (
        [family] => Acme
        [weight] => regular
        [charset] => latin
    )


)

输出:

Array
 [0]   (
        [family] => Abril Fatface
        [weight] => regular
        [charset] => latin,latin-ext

    )

[1] (
        [family] => Akronim
        [weight] => regular, bold
        [charset] => latin,latin-ext

    )
[2] (
        [family] => Acme
        [weight] => regular
        [charset] => latin

    )

推荐答案

功能

function font_merge_unique($col, $arr, $exj)
{
    $test = array();

    foreach($arr AS $key => $row)
    {
        $test[$key] = strtolower(preg_replace('/[^A-Za-z0-9]/', '', $row[$col]));
        foreach($exj AS $index)
        {
            $arr[$key][$index] = array_map('trim', (is_array($arr[$key][$index]) ? $arr[$key][$index] : explode(',', $arr[$key][$index])));
        }
    }

    $unique = array_unique($test);

    $dupes = array_diff_key($test, $unique);

    $list = array();

    foreach($unique AS $key => $n)
    {
        $list[$key] = $arr[$key];
    }

    foreach($dupes AS $di => $row)
    {
        $index = array_search($row, $unique);

        foreach($exj AS $merge)
        {
            $list[$index][$merge] += $arr[$di][$merge];
        }
    }

    foreach($list AS $index => $row)
    {
        foreach($exj AS $merge)
        {
            $list[$index][$merge] = implode(',', $list[$index][$merge]);
        }
    }

    return array_values($list);
}

用法

  • 参数1(字符串)要唯一的值的键名.
  • 要处理的参数2(阵列).
  • 参数3(数组)处理的数组中的键列表,以使(字符串|数组)值成为唯一的逗号分隔的字符串.

  • Param 1 (String) Key name of value to make unique.
  • Param 2 (Array) To Process.
  • Param 3 (Array) List of keys in processed array to make (String|Array) values a unique comma separated String.

font_merge_unique('family', $array, array('weight','charset'))

结果

Array
(
    [0] => Array
        (
            [family] => Abril Fatface
            [weight] => regular
            [charset] => latin,latin-ext
        )

    [1] => Array
        (
            [family] => Akronim
            [weight] => regular,bold
            [charset] => latin,latin-ext
        )

    [2] => Array
        (
            [family] => Acme
            [weight] => regular
            [charset] => latin
        )

)

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

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