【问题标题】:PHP : Split an Array by conditionsPHP:按条件拆分数组
【发布时间】:2023-03-11 00:43:02
【问题描述】:

我有一个数组 $values$Tmax= 500

    $values = array (
    array (0 => "MONTENVERS"),
    array (0 => "HUVEAU"),
    array (0 => "PHILOGUI"),
    array (0 => "SEGARD CHRISTINE PATRIMOINE"),
    array (0 => "STIQUEL"),
    array (80 => "LINO"),
    array (86 => "MAUBERT"),
    array (94 => "GOSSELIN" ),
    array (97 => "LIMPA" ),
    array (98 => "CASSIERA" ),
    array (120 => "LES VIGNES"),
    array (123 => "WURTZ"),
    array (124 => "ROUSSET-GAILLARD" ),
    array (124 => "LEGRAND" ),
    array (126 => "SANZ" ),
    array (131 => "VIRONNEAU"),
    array (133 => "SOCCORO"),
    array (136 => "DESNOS"),
    array (178 => "BARRIAC"),
    array (233 => "MONTALBETTI"),
    array (251 => "FOSSET"),
    array (264 => "HERY"),
    array (350 => "HUVEAU"),
    array (352 => "GABSARIC"),
    array (471 => "DSR"),
    array (573 => "RTAIMATE"),
    array (582 => "DEGERMANN"),
    array (589 => "PIERVIE"),
    array (601 => "BLC"),
    array (617 => "SP PATRIMOINE"),
    array (3467 => "RESIDENCE ORPEA DES RIVES D'OR"),
);

我想要 2 个结果:

值和值的总和

http://joberjob.com/script/index.php

值和值的总和>5$tmax(nb off 迭代可以是 max 3)

http://joberjob.com/script/index.php

示例: 我有这个:


我想要那个

【问题讨论】:

  • 有什么问题?非常不清楚您的“拆分”规则是什么。
  • 如果是"select some entries that add up to 500 or more",那么就有超过1亿个有效组合。例如,整个列表是一个有效的组合。它需要比这更清楚,否则它只是某种随机选择。
  • 我想要总和组,如果 sum tmax nb 的迭代可以是 3
  • if(sum(values)<=Tmax){ **sum 3 lines min N lines max** }elseif(sum(values)>Tmax){ **sum but Nb of lines = 3** }

标签: php arrays checkbox


【解决方案1】:
$values = array (
array (
        0 => "MONTENVERS" 
),
array (
        0 => "HUVEAU" 
),
array (
        0 => "PHILOGUI" 
),
array (
        0 => "SEGARD CHRISTINE PATRIMOINE" 
),
array (
        0 => "STIQUEL" 
),
array (
        80 => "LINO" 
),
array (
        86 => "MAUBERT" 
),
array (
        94 => "GOSSELIN" 
),
array (
        352 => "GABSARIC" 
),
 array (
        471 => "DSR" 
),
array (
        573 => "RTAIMATE" 
)
);

//$Tmax = 500;

$collection = [];
$sum = 0;
$index = 0;

foreach ($values as $value) {
    if (!isset($collection[$index])) {
        $collection[$index] = [];
    }

    if (key($value) + $sum <= $Tmax) {
        $collection[$index][] = $value;
        $sum += key($value);

        continue;
    }


    if (count($collection[$index]) > 2) {
        $sum = 0;
        $index ++;
    }


    if (!isset($collection[$index])) {
        $collection[$index] = [];
    }

    if (key($value) + $sum > $Tmax) {
        $collection[$index][] = $value;
        $sum += key($value);

        continue;
    }
}

var_dump($collection);die;

?>

此代码显示

但我想要:

【讨论】:

    【解决方案2】:

    很难理解您想要达到的目标 - 即使从图像中也是如此。但这就是你想要的吗?

        $Tmax = 500;
    
        $collection = [];
        $sum = 0;
        $index = 0;
    
        foreach ($values as $value) {
            if (!isset($collection[$index])) {
                $collection[$index] = [];
            }
    
            if (key($value) + $sum < $Tmax) {
                $collection[$index][] = $value;
                $sum += key($value);
    
                continue;
            }
    
            if (count($collection[$index]) > 2) {
                $sum = 0;
                $index ++;
            }
    
            if (!isset($collection[$index])) {
                $collection[$index] = [];
            }
    
            if (key($value) + $sum < $Tmax) {
                $collection[$index][] = $value;
                $sum += key($value);
    
                continue;
            }
        }
    
        print_r($collection);
    

    【讨论】:

    • 这与屏幕截图中看到的行为不匹配 - 即 ">tmax" 中的所有 3 个条目实际上都低于 500。问题描述了一个“总数”,但没有关于定义应该添加什么的内容一起作为一个有效的组。
    • 请测试我的链接
    • 如果我使用复选框并点击计算我想重新制作所有...(我有一个基本的英语水平:S)
    • if(sum(values)
    • if(sum(values)&lt;=Tmax){ **sum 3 lines min N lines max** }elseif(sum(values)&gt;Tmax){ **sum but Nb of lines = 3** }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多