![](/img/trans.png)
[英]Explode and transpose nominated comma-separated strings of an associative array
[英]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.