簡體   English   中英

在二維數組中分解多個逗號分隔的字符串,然后獲取所有唯一值

[英]Explode multiple comma-separated strings in a 2d array, then get all unique values

我有一個二維數組,它返回我這個值:

Array ( 
   [0] => Array ( 
          [0] => wallet,pen 
          [1] => perfume,pen 
   ) 
   [1] => Array ( 
          [0] => perfume, charger 
          [1] => pen,book 
   ).

為此,我想知道是否有可能創建一個 function 它將以這種方式組合陣列,並創建一個新的:

如果例如[0] => Array ( [0] => wallet,pen [1] => perfume,pen )那么應該等於[0] => Array ( [0] => wallet,pen, perfume )因為有一個共同的詞 else do nothing。

並且在此之后將每個單詞作為字符串檢索以進行進一步的操作。


我怎樣才能使這樣一個數組的值唯一。 Array ( [0] => Array ( [0] => wallet [1] => pen [2] => perfume [3] => pen) )因為有兩次 pen 我希望以這種方式刪除它( [0] => Array ( [0] => wallet [1] => pen [2] => perfume) )

這只是映射數組和組合內部數組的問題:

$x = [['wallet,pen', 'perfume,pen'], ['perfume,charger', 'pen,book']];

$r = array_map(function($item) {
    return array_unique(call_user_func_array('array_merge', array_map(function($subitem) {
        return explode(',', $subitem);
    }, $item)));
}, $x);

演示

這首先根據逗號分割所有字符串。 然后將它們與array_merge()合並在一起,並使用array_unique()刪除重復項。

另請參見: call_user_func_array()array_map()

嘗試這個 :

$array = Array (Array ( "wallet,pen", "perfume,pen" ), Array ( "perfume, charger", "pen,book" ));
$res   = array();
foreach($array as $key=>$val){
   $temp  = array();
   foreach($val as $k=>$v){
     foreach(explode(",",$v) as $vl){
        $temp[]  = $vl;
     }
   }
   if(count(array_unique($temp)) < count($temp)){
     $res[$key] = implode(",",array_unique($temp));
   }
   else{
     $res[$key] = $val;
   }
}

echo "<pre>";
print_r($res);

輸出:

Array
(
    [0] => wallet,pen,perfume
    [1] => Array
        (
            [0] => perfume, charger
            [1] => pen,book
        )

)

您可以通過將標簽分配為元素的鍵來消除重復值,同時將它們推入結果數組 - PHP 不允許在數組的同一級別上重復鍵,因此任何重新遇到的標簽都將被簡單地覆蓋。

您可以為此任務使用遞歸或靜態編寫的循環。

代碼:(演示

$result = [];
foreach ($array as $row) {
    foreach ($row as $tags) {
        foreach (explode(',', $tags) as $tag) {
            $result[$tag] = $tag;
        }
    }
}
var_export(array_values($result));

代碼:(演示

$result = [];
array_walk_recursive(
    $array,
    function($v) use(&$result) {
        foreach (explode(',', $v) as $tag) {
            $result[$tag] = $tag;
        }
    }
);
var_export(array_values($result));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM