PHP中的逻辑问题

Sho*_*hoe 1 php logic

好的,我测试了以下内容,我只是让你知道我发现了什么:

echo ('-1' < 0) ? 'true' : 'false'; // will echo "true"
echo ('1' > 0) ? 'true' : 'false'; // will echo "true"
# Notice that '-1' and '1' are strings
Run Code Online (Sandbox Code Playgroud)

现在让我们在过滤所有结果后从数据库中获取一个数组,以便只获取行数UID = 1.

$this->a = array(
    [0] => array(
        'UID' => '1',
        'PID' => '91',
        'Amount' => '-1'
    ),
    [1] => array(
        'UID' => '1',
        'PID' => '92',
        'Amount' => '1'
    ),
    [2] => array(
        'UID' => '1',
        'PID' => '93',
        'Amount' => '1'
    )
);
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个posAmount($PID)返回trueif 'Amount' > 0falseif 的函数'Amount' < 0.(注意:金额= 0是我真的不在乎的事情).此外,我想编写类似的函数negAmount($PID),返回与第一个完全相反的函数.我现在想向您介绍我的双重功能:

public function posAmount($pid)
{
    foreach ($this->a as $a)
    {
        if (count($this->a) == 0) { return false; }
        return ($a['PID'] == $pid and $a['Amount'] > 0) ? true : false;
    }
}

public function negAmount($pid)
{
    foreach ($this->a as $a)
    {

        if (count($this->a) == 0) { return false; }
        return ($a['PID'] == $pid and $a['Amount'] < 0) ? true : false;
    }
}
Run Code Online (Sandbox Code Playgroud)

很酷的事实是,关于第一个数组(我检查过,var_dump()它通过整个脚本保持其性质):

$istance->negAmount(91); // Returns true, as expected
$istance->posAmount(92); // Returns false, as NOT expected.
# Why do God wants me to get mad?
Run Code Online (Sandbox Code Playgroud)

Ste*_*hen 5

问题是你总是在foreach循环的第一次迭代中返回.你应该重写这样的函数:

public function negAmount($pid) {
    if (count($this->a) == 0) { return false; }
    foreach ($this->a as $a) {
        if ($a['PID'] == $pid) {
            if ($a['Amount'] < 0) {
                return true;
            }
        }
    }
    return false;
}

public function posAmount($pid) {
    if (count($this->a) == 0) { return false; }
    foreach ($this->a as $a) {
        if ($a['PID'] == $pid) {
            if ($a['Amount'] > 0) {
                return true;
            }
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)