为什么array_push在我的情况下不起作用?

时间:2015-11-06 13:01:48

标签: php

我在php中有以下功能:

function addEntryHere($day, $numberId, $numberOfTexts, $entries) {

    foreach($entries as $entry) {
        if($entry->$day == $day) {
            $entry->addToEntry($numberId, $numberOfTexts);
        }
    }
    $newEntry = new Entry($day);
    $newEntry->addToEntry($standId, $numberOfTexts);

    array_push($entries, $newEntry);

    //print_r($entries);
}

当我在循环中调用此函数时:

while($row = mysqli_fetch_array($result)) {
    echo "count table before: " . count($entries);
    for($i=23; $i<26; $i++) {
        addEntryHere($i, $row[1], $row[2], $entries);
        //print_r($entries);
    }
    echo "count table after: " . count($entries);
}

我只看到:

count table before: 0
count table after: 0

我的addToEntry方法非常简单:

function addToEntry($numberId, $numberOfTexts) {
        switch($numberId) {
            case 1: $this->number1+= $numberOfTexts; break;
            case 2: $this->number2+= $numberOfTexts; break;
        }
    }

那么,为什么我会不断获得输出0,即使$result中有一些数据?我决定将数组$entries传递给addEntryHere方法,因为我无法在方法中引用它,即使我认为它具有全局范围......

=======编辑

按照观察者的建议后我修改了我的代码,但接着这行:

if($entry->$day == $day) {

将错误抛给我:

Notice: Undefined property: Entry::$23 

并且浏览器会多次打印这样的错误(因为它在while循环中)。这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您只修改函数内的局部变量。每次调用函数后,该局部变量都会消失并丢失。你想要做的是将你的计算值返回给调用上下文,以便以后可以使用它:

    array_push($entries, $newEntry);

    return $entries;
}

电话:

while($row = mysqli_fetch_array($result)) {
    echo "count table before: " . count($entries);
    for($i=23; $i<26; $i++) {
        $entries = addEntryHere($i, $row[1], $row[2], $entries);
        //print_r($entries);
    }
    echo "count table after: " . count($entries);
}

如果您正在尝试使用全局范围,请注意在PHP中您必须在函数内部显式import the global scope

function addEntryHere($day, $numberId, $numberOfTexts) {
    global $entries;

但是要意识到,一般来说,使用全局变量is an anti-pattern并建议不要使用。