来自对象的数组只包含一个结果

时间:2016-01-11 10:08:20

标签: php oop laravel

我使用Laravel 5.2并制作如下代码,为什么变量结果不同($ mems和$ member)

// Topup.php

$service = new \Spektr\Libraries\Service;
$member= $service->calc_bonus(2, 3);
print"Topup Result";
print_r($member);

这是我的服务类

<?php
namespace Spektr\Libraries;

class Service 
{

    public function calc_bonus($mem_id, $prd_id, $mems=null) {

        $bonus =0;  
        if(is_null($mems)) 
            $mems=[];
        $upline_id=\Spektr\Model\Member::whereMemId($mem_id)->value('upline_id');
        if ($upline_id) {

            \Log::info("upline-id: ".$upline_id);
            $this->calc_bonus($upline_id, $prd_id, $mems);
        }
print"service class result :";
print_r($mems);
        return $mems;
    }
}

当我运行topup.php时,页面结果将显示print_r($ mems)和print_r($ member)的结果

service class result :Array
(
    [0] => Array
        (
            [mem_id] => 2
            [price] => 5100
            [bonus] => 0
        )

    [1] => Array
        (
            [mem_id] => 1
            [price] => 5000
            [bonus] => 100
        )

)
service class result :Array
(
    [0] => Array
        (
            [mem_id] => 2
            [price] => 5100
            [bonus] => 0
        )

)
Topup ResultArray
(
    [0] => Array
        (
            [mem_id] => 2
            [price] => 5100
            [bonus] => 0
        )

)

为什么Topup.php上的结果只包含一个数组?请帮助我的代码,

我希望topup.php的结果包含所有拥有成员上线的成员

数据库数据的结构就像这样

mem_id|upline_id|name
1         null    member A
2          1      member B

THX

2 个答案:

答案 0 :(得分:0)

$ member是topup.php中的变量将其声明为数组

$service = new \Spektr\Libraries\Service();

$member  =  array();

$member= $service->calc_bonus(2, 3);
print"Topup Result";
print_r($member);

测试您的代码,使用上述更改。

答案 1 :(得分:0)

我已经根据@ raphioly-san回答

找到了这个解决方案
<?php
namespace Spektr\Libraries;

class Service 
{

    public function calc_bonus($mem_id, $prd_id, $mems=null) {

        $bonus =0;  
        if(is_null($mems)) 
            $mems=[];
        $upline_id=\Spektr\Model\Member::whereMemId($mem_id)->value('upline_id');
        if ($upline_id) {

            \Log::info("upline-id: ".$upline_id);
            $mems= $this->calc_bonus($upline_id, $prd_id, $mems); //<<-- add variable $mems
        }
print"service class result :";
print_r($mems);
        return $mems;
    }
}