为什么这个数组元素的值解析为零?

时间:2018-03-31 00:43:57

标签: php for-loop output

我正在为我的网站进行分页,但我仍然坚持使用以下代码。我一直在搞乱它至少一个小时,似乎无法解决输出的问题。

当然public function view2() { if(isset($_GET['var1'])){ $var1 = $_GET['var1']; } // Similar for var2 } 语句只执行一次。

正如预期的那样,第一个if会返回echo ...

但是,出于某种原因,第二个1echo ...作为字符串而不是0作为字符串返回...

<div>1</div>
  • 我尝试将$rowCount = 5; $pgCount = ceil($rowCount / 10); $pgParamArray["page"] = $pgCount; $pgArray = array("", "", "", "", ""); for ($i = 0; $i < 5; $i++) { if ($pgParamArray["page"] - $i > 0) { echo $pgParamArray["page"] - $i; $pgArray[$i] = "<div>" . $pgParamArray["page"] - $i . "</div>"; echo $pgArray[$i]; } } 设为$pgArrayarray()没有运气。

  • 即使array($v1, $v2, $v3, $v4, $5)返回float,我也尝试将$ rowCount(最初是数据库中的字符串)转换为数字。再没有骰子。

  • var_dump($pgParamArray)也会返回echo $pgArray["0"]

  • 0也会返回float。

  • var_dump($pgArray[0])显然会返回数组。

  • 但是,var_dump($pgArray)会返回var_dump($pgArray)

我绝对不知道为什么array(5) { [0]=> string(7) ...会返回$pgArray[0],但0会返回var_dump($pgArray)。这对我来说毫无意义。 有人知道array(5) { [0]=> string(7) ...解析为$pgArray[0]的原因吗?

2 个答案:

答案 0 :(得分:2)

在括号中包含你的陈述似乎对我有用:

$pgArray[$i] = "<div>" . ($pgParamArray["page"] - $i) . "</div>";

没有括号,似乎价值完全破裂;该页面根本不会打印<div>标签,而只是在已打印的0上添加一个尾随1

我认为这是由于PHP如何处理字符串连接,但我无法给出一个确切答案,说明为什么会发生这种情况。为了安全起见,我总是将任何方程式存储在变量中,然后再传入它们,或者在括号内执行所有操作。

这样,你就不会有这样奇怪的遭遇(例如):

echo "<div>" . 1 + 1 . "</div>";     // returns 1
echo "<div>" . (1 + 1) . "</div>";   // returns 2

答案 1 :(得分:2)

您需要按照接受的答案中提到的算术部分进行分组:
<div class="col-md-4"> <input class="form-control text-box single-line" id="Father_Phone" name="Father.Phone" type="text" value=""> <span class="field-validation-valid text-danger" data-valmsg-for="Father.Phone" data-valmsg-replace="true"></span> </div> <div class="col-md-4"> <input class="form-control text-box single-line input-validation-error" data-val="true" data-val-emailrequired="Email is required if Phone is not provided" data-val-emailrequired-stringphoneprop="Phone" id="Student_Email" name="Student.Email" type="text" value=""> <span class="text-danger field-validation-error" data-valmsg-for="Student.Email" data-valmsg-replace="true"><span for="Student_Email" class="">Email is required if Phone is not provided</span></span> </div> <div class="col-md-4"> <input class="form-control text-box single-line" id="Mother_Phone" name="Mother.Phone" type="text" value=""> <span class="field-validation-valid text-danger" data-valmsg-for="Mother.Phone" data-valmsg-replace="true"></span> </div> <div class="col-md-4"> <input class="form-control text-box single-line input-validation-error" data-val="true" data-val-emailrequired="Email is required if Phone is not provided" data-val-emailrequired-stringphoneprop="Phone" id="Father_Email" name="Father.Email" type="text" value=""> <span class="text-danger field-validation-error" data-valmsg-for="Father.Email" data-valmsg-replace="true"><span for="Father_Email" class="">Email is required if Phone is not provided</span></span> </div> <div class="col-md-4"> <input class="form-control text-box single-line" id="Mother_Phone" name="Mother.Phone" type="text" value=""> <span class="field-validation-valid text-danger" data-valmsg-for="Mother.Phone" data-valmsg-replace="true"></span> </div> <div class="col-md-4"> <input class="form-control text-box single-line input-validation-error" data-val="true" data-val-emailrequired="Email is required if Phone is not provided" data-val-emailrequired-stringphoneprop="Phone" id="Mother_Email" name="Mother.Email" type="text" value=""> <span class="text-danger field-validation-error" data-valmsg-for="Mother.Email" data-valmsg-replace="true"><span for="Mother_Email" class="">Email is required if Phone is not provided</span></span> </div>

要了解此处发生了什么,您需要在命令行上运行它:

$pgArray[$i] = "<div>" . ($pgParamArray["page"] - $i) . "</div>";

如您所见,php > $rowCount = 5; php > php > $pgCount = ceil($rowCount / 10); php > php > $pgParamArray["page"] = $pgCount; php > php > $pgArray = array("", "", "", "", ""); php > php > for ($i = 0; $i < 5; $i++) { php { php { if ($pgParamArray["page"] - $i > 0) { php { php { echo $pgParamArray["page"] - $i; php { php { $pgArray[$i] = "<div>" . $pgParamArray["page"] - $i . "</div>"; php { php { echo $pgArray[$i]; php { php { } php { php { } 10</div> php > 的输出为echo $pgParamArray["page"] - $i;,紧随其后为1作为0</div>的内容。

真正的问题是,

中的$pgArray[$i]发生了什么

<div>

在看到实际输出之后,答案现在变得更加明显:它是一个分组问题。 PHP只是从左到右:

$pgArray[$i] = "<div>" . $pgParamArray["page"] - $i . "</div>";