具有条件的分裂数组

时间:2017-04-05 10:03:00

标签: php arrays split

我尝试分割一个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" }

谢谢你的帮助

2 个答案:

答案 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> explodemax函数的解决方案:

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