如何根据价值观对一个集合进行分组?例如这一个:
Collection {#250 ▼
#items: array:4 [▼
"CASSETE_1" => "500"
"CASSETE_2" => "500"
"CASSETE_3" => "100"
"CASSETE_4" => "100"
]
}
我需要对其进行分组并获得如下结果:
Collection {#250 ▼
#items: array:4 [▼
"CASSETE_1 / CASSETE_2" => "500"
"CASSETE_3 / CASSETE_4" => "100"
]
}
这可能吗?
我使用unique()
但结果是:
Collection {#251 ▼
#items: array:2 [▼
"CASSETE_1" => "500"
"CASSETE_3" => "100"
]
}
答案 0 :(得分:1)
没有本地方法可以做到这一点,你需要自定义功能。这就是我所做的
1将集合转换为数组
2翻转
3按值过滤并按/
连接它们4再次翻转
$arr=array("CASSETE_1" => "500",
"CASSETE_2" => "500",
"CASSETE_3" => "100",
"CASSETE_4" => "100");
$result = array();
foreach (array_flip($arr) as $k=>$v) {
$result[$k] = implode("/",array_keys(array_filter($arr, function($elem) use($k){
return $elem == $k;
})));
}
echo "<pre>";
print_r(array_flip($result));
输出
Array
(
[CASSETE_1/CASSETE_2] => 500
[CASSETE_3/CASSETE_4] => 100
)
答案 1 :(得分:0)
请尝试以下操作(首先将集合转换为数组):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span></span>
输出应为:
$input = [
"CASSETE_1" => "500",
"CASSETE_2" => "500",
"CASSETE_3" => "100",
"CASSETE_4" => "100",
];
$values = array_unique(array_values($input));
// output results
$output =[];
foreach ($values as $v) {
$index = implode(", ", array_keys($input, $v));
$output[$index] = $v;
}
print_r($output);
您应该能够通过使用您需要的字符更改“,”来构建所需的索引字符串。