我尝试分割一个php表,保留每个组中最大的元素:
示例:
"S1 E22"
"S2 E22"
"S3 E22"
"S4 E3"
数组:
array(69) { [0]=> string(34) "S1 E1" [1]=> string(34) "S1 E2" [2]=> string(34) "S1 E3" [3]=> string(34) "S1 E4" [4]=> string(34) "S1 E5" [5]=> string(34) "S1 E6" [6]=> string(34) "S1 E7" [7]=> string(34) "S1 E8" [8]=> string(34) "S1 E9" [9]=> string(35) "S1 E10" [10]=> string(35) "S1 E11" [11]=> string(35) "S1 E12" [12]=> string(35) "S1 E13" [13]=> string(35) "S1 E14" [14]=> string(35) "S1 E15" [15]=> string(35) "S1 E16" [16]=> string(35) "S1 E17" [17]=> string(35) "S1 E18" [18]=> string(35) "S1 E19" [19]=> string(35) "S1 E20" [20]=> string(35) "S1 E21" [21]=> string(35) "S1 E22" [22]=> string(34) "S2 E1" [23]=> string(34) "S2 E2" [24]=> string(34) "S2 E3" [25]=> string(34) "S2 E4" [26]=> string(34) "S2 E5" [27]=> string(34) "S2 E6" [28]=> string(34) "S2 E7" [29]=> string(34) "S2 E8" [30]=> string(34) "S2 E9" [31]=> string(35) "S2 E10" [32]=> string(35) "S2 E11" [33]=> string(35) "S2 E12" [34]=> string(35) "S2 E13" [35]=> string(35) "S2 E14" [36]=> string(35) "S2 E15" [37]=> string(35) "S2 E16" [38]=> string(35) "S2 E17" [39]=> string(35) "S2 E18" [40]=> string(35) "S2 E19" [41]=> string(35) "S2 E20" [42]=> string(35) "S2 E21" [43]=> string(35) "S2 E22" [44]=> string(34) "S3 E1" [45]=> string(34) "S3 E2" [46]=> string(34) "S3 E3" [47]=> string(34) "S3 E4" [48]=> string(34) "S3 E5" [49]=> string(34) "S3 E6" [50]=> string(34) "S3 E7" [51]=> string(34) "S3 E8" [52]=> string(34) "S3 E9" [53]=> string(35) "S3 E10" [54]=> string(35) "S3 E11" [55]=> string(35) "S3 E12" [56]=> string(35) "S3 E13" [57]=> string(35) "S3 E14" [58]=> string(35) "S3 E15" [59]=> string(35) "S3 E16" [60]=> string(35) "S3 E17" [61]=> string(35) "S3 E18" [62]=> string(35) "S3 E19" [63]=> string(35) "S3 E20" [64]=> string(35) "S3 E21" [65]=> string(35) "S3 E22" [66]=> string(34) "S4 E1" [67]=> string(34) "S4 E2" [68]=> string(34) "S4 E3" }
谢谢你的帮助
答案 0 :(得分:1)
使用<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="UNIDADE">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "unidade")%>
-
<%# DataBinder.Eval(Container.DataItem, "sigUnidade1")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UNIDADE APOIADA">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "unidadeApoiada")%>
-
<%# DataBinder.Eval(Container.DataItem, "sigUnidade2")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
,explode
和max
函数的解决方案:
substr
输出:
$arr = [
"S1 E2", "S1 E3", "S1 E4", "S1 E5", "S1 E6", "S1 E7", "S1 E8", "S1 E9", "S1 E10", "S1 E11", "S1 E12", "S1 E13", "S1 E14", "S1 E15",
"S1 E16", "S1 E17", "S1 E18", "S1 E19", "S1 E20", "S1 E21", "S1 E22", "S2 E1", "S2 E2", "S2 E3", "S2 E4", "S2 E5", "S2 E6", "S2 E7",
"S2 E8", "S2 E9", "S2 E10", "S2 E11", "S2 E12", "S2 E13", "S2 E14", "S2 E15", "S2 E16", "S2 E17", "S2 E18", "S2 E19", "S2 E20",
"S2 E21", "S2 E22", "S3 E1", "S3 E2", "S3 E3", "S3 E4", "S3 E5", "S3 E6", "S3 E7", "S3 E8", "S3 E9", "S3 E10", "S3 E11", "S3 E12",
"S3 E13", "S3 E14", "S3 E15", "S3 E16", "S3 E17", "S3 E18", "S3 E19", "S3 E20", "S3 E21", "S3 E22", "S4 E1", "S4 E2", "S4 E3"
];
$groups = [];
foreach ($arr as $item) {
list($group, $el) = explode(" ", $item);
$groups[$group] = (isset($groups[$group]))
? "E" . max(substr($groups[$group], 1), substr($el, 1))
: $el;
}
print_r($groups); // the largest values for each group
要将最终数组作为&#34;键/值&#34;( group )字符串的数组,请使用以下内容:
Array
(
[S1] => E22
[S2] => E22
[S3] => E22
[S4] => E3
)
输出:
$groups = array_map(function($v, $k){
return $k . " " . $v;
}, $groups, array_keys($groups));
print_r($groups);
答案 1 :(得分:1)
这是实现此目的的替代版本,
<?php
$arr = [
"S1 E1", "S1 E2", "S1 E3", "S1 E4", "S1 E5", "S1 E6", "S1 E7", "S1 E8", "S1 E9", "S1 E10", "S1 E11", "S1 E12", "S1 E13", "S1 E14", "S1 E15", "S1 E16", "S1 E17", "S1 E18", "S1 E20", "S1 E19", "S1 E21", "S1 E22", "S2 E1", "S2 E2", "S2 E3", "S2 E4", "S2 E5", "S2 E6", "S2 E7", "S2 E8", "S2 E9", "S2 E10", "S2 E11", "S2 E12", "S2 E13", "S2 E14", "S2 E15", "S2 E16", "S2 E17", "S2 E18", "S2 E19", "S2 E20", "S2 E22", "S2 E21", "S3 E1", "S3 E2", "S3 E3", "S3 E4", "S3 E5", "S3 E6", "S3 E7", "S3 E8", "S3 E9", "S3 E10", "S3 E11", "S3 E12", "S3 E13", "S3 E14", "S3 E15", "S3 E16", "S3 E17", "S3 E18", "S3 E19", "S3 E20", "S3 E22", "S3 E21", "S4 E1", "S4 E3", "S4 E2"];
$groups = [];
foreach ($arr as $key => $value) {
$temp = explode(' ', $value);
$first = preg_split("/(\d+)/", $temp[0], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$second = preg_split("/(\d+)/", $temp[1], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$groups[$first[0]][$first[1]][] = $second[1];
$later[] = $first[1];
$first_ident = $first[0];
$second_ident = $second[0];
}
// check if array is multidimensional
function is_multi($a)
{
$rv = array_filter($a, 'is_array');
if (count($rv) > 0) {
return true;
}
return false;
}
// sort if values are not arranged
function recur_ksort(&$array)
{
foreach ($array as $key => &$value) {
if (is_array($value) && is_multi($value)) {
recur_ksort($value);
} else if (is_array($value) && !is_multi($value)) {
asort($value);
}
}
return $array;
}
recur_ksort($groups);
$later = array_values(array_unique($later));
$result = [];
foreach ($later as $val1) {
$result[$first_ident . $val1] = $second_ident . max($groups[$first_ident][$val1]);
}
print_r($result);
这是工作code。