数组中的PHP计算(递归?)

数组中的PHP计算(递归?),php,Php,我正在尝试编写一个函数,当给定产品的价格和该用户拥有的积分时,计算每个订单的总价格。信用证应该被扣除,如果还有什么剩余,应该从下一个订单中扣除 该函数应返回每个订单的最终价格以及每个帐户在单个数组中剩余的积分,其中客户ID为键。任何负数(信用或订单价格)都应设置为0 “abc”和“def”是客户ID。这个示例代码应该能更好地解释问题我需要递归函数吗? 输入: //should return: order 1 = 375, order 2 = 90, remaining credit = 0; $

我正在尝试编写一个函数,当给定产品的价格和该用户拥有的积分时,计算每个订单的总价格。信用证应该被扣除,如果还有什么剩余,应该从下一个订单中扣除

该函数应返回每个订单的最终价格以及每个帐户在单个数组中剩余的积分,其中客户ID为键。任何负数(信用或订单价格)都应设置为0

abc
”和“
def
”是客户ID。这个示例代码应该能更好地解释问题我需要递归函数吗?

输入:

//should return: order 1 = 375, order 2 = 90, remaining credit = 0;
$order['abc'][1] = 500;
$order['abc'][2] = 90;
$credit['abc'] = 125;

//should return: order 1: 0, order 2: 0, remaining credit = 125
$order['def'][1] = 100;
$order['def'][2] = 75;
$credits['def'] = 300;
返回值应为单个数组,例如:

$set['abc'][1] = 375;
$set['abc'][2] = 90;
$set['abc']['credit_remaining'] = 0;
$set['def'][1] = 0;
$set['def'][2] = 0;
$set['def']['credit_remaining'] = 125;

不需要是递归的。这应该起作用:

function someFunction( $order, $credit ) {
    $set = NULL;
    $keys = array_keys( $order );
    foreach ( $keys as $key ) {
        $set[$key]['credit_remaining'] = $credit[$key];

        // assuming that the orders are numerically contiguous
        for ( $counter = 1; $counter < count( $order[$key] ); $counter++ ) {
            if ( $order[$key][$counter] < $set[$key]['credit_remaining'] ) {
                // then the order is less than the credit
                $set[$key]['credit_remaining'] -= $order[$key][$counter];
                $set[$key][$counter] = 0;
            } else {
                // not enough credit to cover this order
                $set[$key][$counter] -= $set[$key]['credit_remaining'];
                $set[$key]['credit_remaining'] = 0;
            }
        }
    }

    return $set;
}
function someFunction($order,$credit){
$set=NULL;
$keys=数组_键($order);
foreach($key作为$key){
$set[$key]['credit_remaining']=$credit[$key];
//假设顺序在数字上是连续的
对于($counter=1;$counter
不需要是递归的。这应该起作用:

function someFunction( $order, $credit ) {
    $set = NULL;
    $keys = array_keys( $order );
    foreach ( $keys as $key ) {
        $set[$key]['credit_remaining'] = $credit[$key];

        // assuming that the orders are numerically contiguous
        for ( $counter = 1; $counter < count( $order[$key] ); $counter++ ) {
            if ( $order[$key][$counter] < $set[$key]['credit_remaining'] ) {
                // then the order is less than the credit
                $set[$key]['credit_remaining'] -= $order[$key][$counter];
                $set[$key][$counter] = 0;
            } else {
                // not enough credit to cover this order
                $set[$key][$counter] -= $set[$key]['credit_remaining'];
                $set[$key]['credit_remaining'] = 0;
            }
        }
    }

    return $set;
}
function someFunction($order,$credit){
$set=NULL;
$keys=数组_键($order);
foreach($key作为$key){
$set[$key]['credit_remaining']=$credit[$key];
//假设顺序在数字上是连续的
对于($counter=1;$counter
不需要递归,为什么不试试这样的方法呢

$newArray = array();

foreach ($order as $customer => $value) 
{
    $newArray[$customer]['credit_remaining'] = $credit[$customer];

    foreach ($order[$customer] as $order_num => $cost) 
    {
        //Order is more than credit
        if($newArray[$customer]['credit_remaining'] - $order[$customer][order_num] <= 0)
        {
            $newArray[$customer][$order_num] = $order[$customer][$order_num] - newArray[$customer]['credit_remaining'];
            $newArray[$customer]['credit_remaining'] = 0;
        }

        //Otherwise
        else
        {
            $newArray[$customer]['credit_remaining'] -= $order[$customer][$order_num];
            $newArray[$customer][$order_num] = 0;
        }
    }
}
$newArray=array();
foreach($customer=>$value的订单)
{
$newArray[$customer]['credit_remaining']=$credit[$customer];
foreach($order[$customer]作为$order\u num=>$cost)
{
//秩序比信用更重要

如果($newArray[$customer]['credit_remaining']-$order[$customer][order_num]不需要递归,为什么不试试这样的方法呢

$newArray = array();

foreach ($order as $customer => $value) 
{
    $newArray[$customer]['credit_remaining'] = $credit[$customer];

    foreach ($order[$customer] as $order_num => $cost) 
    {
        //Order is more than credit
        if($newArray[$customer]['credit_remaining'] - $order[$customer][order_num] <= 0)
        {
            $newArray[$customer][$order_num] = $order[$customer][$order_num] - newArray[$customer]['credit_remaining'];
            $newArray[$customer]['credit_remaining'] = 0;
        }

        //Otherwise
        else
        {
            $newArray[$customer]['credit_remaining'] -= $order[$customer][$order_num];
            $newArray[$customer][$order_num] = 0;
        }
    }
}
$newArray=array();
foreach($customer=>$value的订单)
{
$newArray[$customer]['credit_remaining']=$credit[$customer];
foreach($order[$customer]作为$order\u num=>$cost)
{
//秩序比信用更重要

如果($newArray[$customer]['credit\u remaining']-$order[$customer][order\u num]代码在哪里?你到底有什么问题?不,你不需要递归,因为你不需要做任何涉及解决方案本身的事情。你也不需要了解不同客户的代码,只需要一个
function order\u结果($orders,$credit)
。Jon,根据问题中的示例和规范,客户ID是必需的,否则您将无法将任何值与特定客户关联。Stef,我对该功能的用途感到有点困惑,因为这些要求似乎更多地是用于报告,而不是用于实际的财务功能?如果我们知道这一点,我们可能会成为能够提供更多的洞察力和更好的响应。代码在哪里?您到底有什么问题?不,您不需要递归,因为您不需要做任何涉及解决方案本身的事情。您也不需要了解不同客户的代码,只需要一个
函数顺序\u结果($orders,$credit)
。Jon,根据问题中的示例和规范,客户ID是必需的,否则您将无法将任何值与特定客户关联。Stef,我对该功能的用途感到有点困惑,因为这些要求似乎更多地是用于报告,而不是用于实际的财务功能?如果我们知道这一点,我们可能会成为我可以提供更多的见解和更好的响应。您可能是指第5行的
$newArray[]…
。我为您解决了:)您可能是指第5行的
$newArray[]…
。我为您解决了:)