首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php版本7.41中显示json数据?

如何在php版本7.41中显示json数据?
EN

Stack Overflow用户
提问于 2020-01-28 15:55:01
回答 1查看 45关注 0票数 0

我试图在下面的代码中获得$schedule的值,并希望将其转换为数组。我已经写了代码,但不能理解哪里存在问题。代码是:

代码语言:javascript
复制
class Amortization
{
    private $loan_amount;
    private $term_years;
    private $interest;
    private $terms;
    private $period;
    private $currency = "XXX";
    private $principal;
    private $balance;
    private $term_pay;

    public function __construct($data)
    {
        if ($this->validate($data)) {


            $this->loan_amount = (float)$data['loan_amount'];
            $this->term_years = (int)$data['term_years'];
            $this->interest = (float)$data['interest'];
            $this->terms = (int)$data['terms'];

            $this->terms = ($this->terms == 0) ? 1 : $this->terms;

            $this->period = $this->terms * $this->term_years;
            $this->interest = ($this->interest / 100) / $this->terms;

            $results = array(
                'inputs' => $data,
                'summary' => $this->getSummary(),
                'schedule' => $this->getSchedule(),
            );

            $this->getJSON($results);
        }
    }

    private function validate($data)
    {
        $data_format = array(
            'loan_amount' => 0,
            'term_years' => 0,
            'interest' => 0,
            'terms' => 0
        );

        $validate_data = array_diff_key($data_format, $data);

        if (empty($validate_data)) {
            return true;
        } else {
            echo "<div style='background-color:#ccc;padding:0.5em;'>";
            echo '<p style="color:red;margin:0.5em 0em;font-weight:bold;background-color:#fff;padding:0.2em;">Missing Values</p>';
            foreach ($validate_data as $key => $value) {
                echo ":: Value <b>$key</b> is missing.<br>";
            }
            echo "</div>";
            return false;
        }
    }

    private function calculate()
    {
        $deno = 1 - 1 / pow((1 + $this->interest), $this->period);

        $this->term_pay = ($this->loan_amount * $this->interest) / $deno;
        $interest = $this->loan_amount * $this->interest;

        $this->principal = $this->term_pay - $interest;
        $this->balance = $this->loan_amount - $this->principal;

        return array(
            'payment' => $this->term_pay,
            'interest' => $interest,
            'principal' => $this->principal,
            'balance' => $this->balance
        );
    }

    public function getSummary()
    {
        $this->calculate();
        $total_pay = $this->term_pay * $this->period;
        $total_interest = $total_pay - $this->loan_amount;

        return array(
            'total_pay' => $total_pay,
            'total_interest' => $total_interest,
        );
    }

    public function getSchedule()
    {
        $schedule = array();

        while ($this->balance >= 0) {
            array_push($schedule, $this->calculate());
            $this->loan_amount = $this->balance;
            $this->period--;
        }

        return $schedule;

    }

    private function getJSON($data)
    {
        header('Content-Type: application/javascript');
        echo json_encode($data);
    }
}

$data = array(
    'loan_amount' => 20000,
    'term_years' => 1,
    'interest' => 10,
    'terms' => 12
);


$amortization = new Amortization($data);
$amortization = json_decode($amortization, true);
$schedule = $amortization['schedule'];

它将错误显示为:

EN

回答 1

Stack Overflow用户

发布于 2020-01-28 16:05:45

请按如下方式更改您的getJSON函数:

代码语言:javascript
复制
public function getJSON($data)
{
    return json_encode($data);
}

而你的构造函数是:

代码语言:javascript
复制
public function __construct($data)
{
    if ($this->validate($data)) {


        $this->loan_amount = (float)$data['loan_amount'];
        $this->term_years = (int)$data['term_years'];
        $this->interest = (float)$data['interest'];
        $this->terms = (int)$data['terms'];

        $this->terms = ($this->terms == 0) ? 1 : $this->terms;

        $this->period = $this->terms * $this->term_years;
        $this->interest = ($this->interest / 100) / $this->terms;

        $results = array(
            'inputs' => $data,
            'summary' => $this->getSummary(),
            'schedule' => $this->getSchedule(),
        );

        $this->result_json = $this->getJSON($results);
    }
}

public function getResultJson()
{
    return $this->result_json;
}

最后,为了得到结果:

代码语言:javascript
复制
$amortization = new Amortization($data);
$amortization = json_decode($amortization->getResultJson(), true);
$schedule = $amortization['schedule'];

但老实说,您的类需要进行大量修改。您通常不会使用构造函数来返回任何内容。这需要通过类中的某些方法来完成,比如getResultsInJSON()或其他方法,在这些方法中,您可以完成所有的数学或逻辑工作。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59944300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档