【问题标题】:Array push not working in a function? PHP数组推送在函数中不起作用? PHP
【发布时间】:2017-01-22 14:21:34
【问题描述】:

我正在尝试将 5 个日期 ($completion_date) 放入一个数组中我有一个列表我正在循环通过将 $completion_date 传递给下面的函数在列表中有多个相同 $completion_date 的实例但我只想要数组$completion_dates = []; 中的每一个,所以每次我使用array_search($completion_date, $completion_dates); 搜索数组时,如果当前$completion_date 不存在,我想将它添加到数组中,如果是我想修改$completions$payouts 在各自数组中的相同位置。我的问题是 array_push 似乎没有推送所有日期?只有一个?

我已经检查了 array_push 所在的 if 语句,并且它每次都在运行 else 子句(因为 array_push 不能改变它);

function sortResults($completion_date, $payout){
    global $completion_dates, $completions, $payouts;

    $completion_dates = [];
    $completions = [0,0,0,0,0]; // not in use
    $payouts = [0,0,0,0,0]; // not in use


    // check is $completion_date is in $completion_dates array and get position if so.
    $position = array_search($completion_date, $completion_dates);

    if ($position) {
        // update $payouts and $completions @ same $position.
    }else{
        // add $completion_date to $completion_dates array.
        array_push($completion_dates, $completion_date);
    }

}


var_dump($completion_dates);

输出:array(1) { [0]=> string(10) "22/01/2017" }

但也应该输出其他四个日期"18/01/2017""19/01/2017""20/01/2017""21/01/2017"?

我正在循环的数据正在转义日期,就像{"completion_date":"18\/01\/2017","0":"18\/01\/2017","payout":"13.20","1":"13.20"} 不确定它是否重要,它真的不应该吗?

【问题讨论】:

    标签: php arrays array-push


    【解决方案1】:

    因为您每次在函数中都会覆盖 $completion_dates。

    function sortResults($completion_date, $payout)
    {
        global $completion_dates, $completions, $payouts;
    
        $completion_dates = []; <----------------------- HERE
        $completions = [0, 0, 0, 0, 0]; // not in use
        $payouts = [0, 0, 0, 0, 0]; // not in use
    
    
        // check is $completion_date is in $completion_dates array and get position if so.
        $position = array_search($completion_date, $completion_dates);
    
        if ($position) {
            // update $payouts and $completions @ same $position.
        } else {
            // add $completion_date to $completion_dates array.
            array_push($completion_dates, $completion_date);
        }
    
    }
    

    【讨论】:

    • 那也行不通。在开始外部函数时声明全局变量以跟踪它们也听起来更清楚。全局 $completion_dates=array();
    • 即使有外面的数组,全局似乎也不起作用?即使有上面​​评论的帮助。
    • pastebin.com/raw/RFuxAKyU 这也不行吗? (调用时)
    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 2020-08-16
    • 2018-03-11
    • 2019-06-03
    • 2014-01-06
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多