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