需要帮助。我希望根据与$limit关闭的strlen对数组进行分组,并按总长度进行排序。
我的数组看起来如下:
(
[0] => Isofix
[1] => Parkinghelp
[2] => Rainsensor
[3] => Led light
[4] => Hill Start Assist
[5] => Dynamic brake light
[6] => Cornering Brake Control
)例如,我想总结一下接近29的最佳选项。
所以理想情况下,这是我想要找到的组合
侧偏制动控制(23)+等距(6)= 29
动态制动灯(19)+雨水传感器(10)= 29
山启动辅助(17)+ Parkinghelp(11) = 28
Led灯= 90
我的最后一个数组应该如下所示:
Array
(
[0] => Cornering Brake * Control Isofix
[1] => Dynamic brake light * Rainsensor
[2] => Hill Start Assist * Parkinghelp
[3] => Led light
)
// code
$limit = 29;
$arr = array('Isofix', 'Parkinghelp', 'Rainsensor', 'Led light', 'Hill Start Assist', 'Dynamic brake light', 'Cornering Brake Control');
foreach ($arr as $key => $value) {
echo $value . ' - ' . strlen($value);
echo "\n";
}
// this is what i have so far. But it's not checking every possibility
$limit = 29;
$result9009 = array('');
$cur_key = 0;
foreach ($arr as $word) {
if (strlen($result9009[$cur_key]) + strlen($word) <= $limit) {
$result9009[$cur_key] .= ' * ' . $word;
} else {
$result9009[] = $word;
$cur_key++;
}
}发布于 2022-09-09 14:38:57
希望这有帮助,您应该添加最后一个案例,并尝试提高复杂性。
<?php
function cmp($a, $b)
{
return $a["key"] >= $b["key"];
}
$limit = 29;
$arr = array('Isofix', 'Parkinghelp', 'Rainsensor', 'Led light', 'Hill Start Assist', 'Dynamic brake light', 'Cornering Brake Control');
$result=[];
$arrayToCheckin=[];
for ($i=0; $i < count($arr); $i++) {
for ($j=$i+1; $j < count($arr); $j++) {
$key = abs(strlen($arr[$i]) + strlen($arr[$j]) - $limit);
$arrayToCheckin[] = [
'key'=>$key,
'elem1'=>$arr[$i],
'elem2'=>$arr[$j]
];
}
}
usort($arrayToCheckin, "cmp");
$control = [];
foreach ($arrayToCheckin as $val) {
if(!in_array($val['elem1'], $control) && !in_array($val['elem2'], $control)) {
$result[] = $val['elem1'].'*'.$val['elem2'];
$control[] = $val['elem1'];
$control[] = $val['elem2'];
}
}
var_export($result);输出
array (
0 => 'Isofix*Cornering Brake Control',
1 => 'Rainsensor*Dynamic brake light',
2 => 'Parkinghelp*Hill Start Assist',
)https://stackoverflow.com/questions/73662508
复制相似问题