1

我已经花了几个小时来解决这个问题。 我有一个多维数组与字体的细节,我想合并它发送一个请求谷歌网页字体。 (每个数组描述不同html标签的字体细节)任何人都可以帮助我呢?PHP如何删除多维数组中的重复值并合并其他人

输入:

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 

    ) 
+0

可能重复(http://stackoverflow.com/questions/ [如何从在PHP多维数组中删除重复的值] 307674/how-to-remove-duplicate-values-from-a-multi-dimensional-array-in-php) – Jessica

+0

array_filter可以帮助这个http://us1.php.net/manual/en/function.array- filter.php – Rottingham

+0

@Jessica我知道重复是痛苦的重新ar,但你意识到你提出的问题是5岁?可以打他不使用'搜索'非常好。 – Rottingham

回答

0

功能

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(数组)要处理的数组中的键的列表使(String | Array)值为唯一的以逗号分隔的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 
     ) 

) 
+0

Andrew - 你是我的老板:)非常感谢你救了我 – pawelktr