Php 寻找额外的人以及他们属于哪一类

Php 寻找额外的人以及他们属于哪一类,php,codeigniter,Php,Codeigniter,我正在用一点PHP知识为一家酒店编写一个脚本,在这个脚本中,用户(我)选择要租一个房间的人数 我所有的房间都可以住两个人。根据有多少人,我每天额外收费,每人。更多的人可以留下来,但这些“额外费用”将不得不根据年龄支付 function calc() { $data['msg'] = ""; $data['from_date'] = $this->input->post('from_date'); $data['to_date'] = $this->inp

我正在用一点PHP知识为一家酒店编写一个脚本,在这个脚本中,用户(我)选择要租一个房间的人数

我所有的房间都可以住两个人。根据有多少人,我每天额外收费,每人。更多的人可以留下来,但这些“额外费用”将不得不根据年龄支付

function calc()
{
    $data['msg'] = "";
    $data['from_date'] = $this->input->post('from_date');
    $data['to_date'] = $this->input->post('to_date');
    $data['category'] = $this->input->post('category');
    $data['guestid'] = $this->input->post('guestid');
    $data['idroom'] = $this->input->post('room');

    $data['nguests'] = $this->input->post('nguests');
    $data['nchilds'] = $this->input->post('nchilds');
    $data['lchilds'] = $this->input->post('lchilds');

    $data['greek'] = $this->input->post('greek');
    $data['continental'] = $this->input->post('continental');
    $data['halfboard'] = $this->input->post('halfboard');
    $data['whitewine'] = $this->input->post('whitewine');
    $data['redwine'] = $this->input->post('redwine');

    $data['preferences'] = $this->input->post('preferences');
    $data['mandiscount'] = $this->input->post('mandiscount');

    $data['booking'] = $this->input->post('booking');
    $data['airport'] = $this->input->post('airport');
    $data['annotation'] = $this->input->post('annotation');

    $data['is_manual'] = $this->input->post('is_manual');

    if($data['is_manual'] == "manual")
    {
        $data['price_per_day'] = $this->input->post('price_per_day');
    }

    $room_avail = $this->kratiseis->getRoomPrice($data['idroom'], $data['from_date'], $data['to_date']);
    $category_details = $this->admin->getSingleRoomCategory($data['category']);
    $extras = $this->admin->getExtras();
    $client = $this->guests->details($data['guestid']);
    $data['room'] = $this->details->getSingleRoom($data['idroom']);

    //$stay_days = date_diff($data['from_date'], $data['to_date']) - 1;

    $from = new DateTime($this->input->post('from_date'));
    $to = new DateTime($this->input->post('to_date'));
    $stay_days = $from->diff($to);
    $data['stay_for'] = $stay_days->format('%d');

    $data['total_guests'] = $data['nguests'] + $data['nchilds'] + $data['lchilds'];

    /*
     * We only accept 2 persons in any room.  If there are more than 2, we charge extra
     */

    $extra_adults_price = 0;
    $extra_childs_price = 0;
    $extra_adults = 0;
    $extra_childs = 0;
    $we_have_extras = false;

    if($data['total_guests'] > 2)
    {
        /*
         * Find how many adults extra we have.
         */
        if($data['nguests'] > 2)
        {
            $we_have_extras = true;
            $extra_adults = $data['nguests'] - 2;
            $extra_adults_price = ($extra_adults * $data['stay_for']) * 10;
        }

        /*
         * Find how many extra children do we have.
         */
        if( $data['nchilds'] > 2)
        {
            $we_have_extras = true;
            $extra_childs = $data['nchilds'] - 2;
            $extra_childs_price = ($extra_childs * $data['stay_for']) * 5;
        }
    }
以下是我获取数据的视图:

<div class="column-container">
    <div class="column column-1" style="background-color: #097ea1; color: #fff;">Adults:</div>
    <div class="column column-2" style="background-color: #cee8ef">
        <select name="nguests">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
        </select>
    </div>
    <div class="column column-3" style="background-color: #097ea1; color: #fff;">Children 0-5:</div>
    <div class="column column-4" style="background-color: #cee8ef">
        <select name="nchilds">
            <option value="0">0</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
    </div>
    <div class="column column-5" style="background-color: #097ea1; color: #fff;">Children 6-12:</div>
    <div class="column column-6" style="background-color: #cee8ef">
        <select name="lchilds">
            <option value="0">0</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
    </div>
    <div class="column column-7"></div>
    <div class="column column-8"></div>
</div>

成人:
1.
2.
3.
4.
0-5岁儿童:
0
1.
2.
3.
6-12岁儿童:
0
1.
2.
3.
我在控制器中也有一些代码

现在,假设我们预订了3名成人+1名儿童=总共4人。额外费用是10美元,但应该是15美元(成人10美元,儿童5美元)


如何区分额外人员的值,以便获得所需的结果?

试试这段代码,我认为问题在于您的逻辑

Function  CountExtras($data) {      
if($data['total_guests'] <= 2) return 0;

$extra_adults_price = 0;
$extra_childs_price = 0;
$extra_adults = 0;
$extra_childs = 0;

$data['nguests'] = $data['total_guests'] - $data['nchilds'];

If( $data['nguests'] >= 2  )  $data['nguests'] = $data['nguests'] - 2; 
else {
    $data['nguests'] = 0;
    --$data['nchilds'];
}

return $data['nguests']*10 + $data['nchilds']*5;
}

echo CountExtras(array ( 'total_guests' => 1, 'nchilds' => 0 )).'<br>'; // 0
echo CountExtras(array ( 'total_guests' => 2, 'nchilds' => 0 )).'<br>'; // 0
echo CountExtras(array ( 'total_guests' => 3, 'nchilds' => 1 )).'<br>'; // 5 
echo CountExtras(array ( 'total_guests' => 3, 'nchilds' => 0 )).'<br>'; // 10
echo CountExtras(array ( 'total_guests' => 4, 'nchilds' => 1 )).'<br>'; // 15 
函数CountExtras($data){
如果($data['total_guests']=2)$data['nguests']=$data['nguests']-2;
否则{
$data['nguests']=0;
--$data['nchilds'];
}
返回$data['nguests']*10+$data['nchilds']*5;
}
echo CountExtras(数组('total_guests'=>1,'nchilds'=>0))。/0
echo CountExtras(数组('total_guests'=>2,'nchilds'=>0))。
;//0 echo CountExtras(数组('total_guests'=>3,'nchilds'=>1))。/5. echo CountExtras(数组('total_guests'=>3,'nchilds'=>0))。/10 echo CountExtras(数组('total_guests'=>4,'nchilds'=>1))。
;//15
好的。对于任何前两个人,房间价格基本相同。我想你是在这里举例。您已经收集了大量的额外房间用户。 我不知道你为什么不使用基本代数来计算它,因为你在每个表单输入字段中收集特定的数据。也就是说,如果有人设置了2个额外的成人,则需要计算如下:

$price = $this->roomPrice;//some basic value for two persons
$price += ( (int)$this->input->post('extraAdults') > 0 ) ? (int)$this->input->post('extraAdults') * 10 : 0;
$price += ( (int)$this->input->post('extraChild') > 0 ) ? (int)$this->input->post('extraChild') * 5 : 0;
//var_dump($price);

你有没有什么标志表明一个额外的人是成人还是儿童?@MárcioGonzalez你这是什么意思?:)所有值都来自一个表单。用户选择有多少成人(1-4)和有多少儿童(0-4)即将到来。您可以将html表单粘贴到这里吗?看到它会easier@MárcioGonzalez我用上面的代码编辑了我的帖子,谢谢你的时间:)你需要一些默认设置。例如:如果你有两个成年人和一些孩子,那么主要的人总是成年人?你需要制定一些规则。你明白了吗?谢谢你的代码,我可以问一下
--$data['nchilds']是什么意思吗做什么?:P$data['nchilds']=$data['nchilds']-1@t公司如果代码按照您的要求运行,请不要忘记接受答案是的,我知道。:)我没有时间测试你的代码,但我现在有了。不幸的是,我没有得到我期望的结果。如果你读了上面的评论,我想你会理解得更好,因为我解释得更多。你的代码似乎工作得很好,但是如果并且只有成年人是2+如果我们有一个成年人,那么它就不工作了。看一看。Ofc我做了一些小的修改:)很高兴能帮忙!祝你好运