数组取值最优解
$arr =[
'aaa' => 10,
'bbb' => 1,
'ccc' => 1,
'ddd' => 10,
'eee' => 300
.
.
.
];
arsort($arr);
有这样一个数组,它的键值对有无数种可能,如果现在想从中取出键值和为400的键值对,但必须从前面开始(400 = 300 + 10 + 10…)。
// 我现在写的方法,只能取数,不能按排序来,因为是随机的
function demo($cc, $val)
{
for ($i = 1; $i < 1 << count($cc); $i++) {
$sum = 0;
$temp = "";
for ($j = 0; $j < count($cc); $j++) {
if (($i & 1 << $j) != 0) {
$sum += $cc[$j];
$temp .= $cc[$j] . "+";
}
}
if ($sum == $val) {
$arr[] = trim($temp, '+');
}
}
return $arr;
}
各位有什么好方法
推荐文章: