数组取值最优解

$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;
}

各位有什么好方法

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2
wanghan

键是键,值是值,我都没看明白题目啥意思

3年前 评论

好象没有意义呀!

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!