好的,我测试了以下内容,我只是让你知道我发现了什么:
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' > 0或falseif 的函数'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)
问题是你总是在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)