PHP - 显示不同值的相同变量

时间:2017-11-21 04:34:09

标签: php

我正在从mysql中读取一些行来创建一组单选按钮。我需要两次写出播放器的名称,首先是值属性,第二次是文本。我不明白为什么相同的代码($ players [$ x])在输出html中产生两个不同的值。这是php代码:

$players = readSqlFromMySql("select name from players");        
for($x = 0; $x < count($players); $x++) {                     
    echo('<input type="radio" name="radio-choice-v-2" value="' . 
    $players[$x] . '" id="name-choice-' . chr(66 + $x) . '" ><label 
    for="name-choice-' . chr(66 + $x) . '">' . $players[$x] . '</label>');
} 

这是渲染输出html:

<input type="radio" name="radio-choice-v-2" value="<td style='width:150px;border:1px solid black;'>Amie</td>" id="name-choice-B">

所以第一次,变量的输出是“td style = ...”,这是第二次显示预期值(“Amie”)。这是怎么回事?是php吗? jQuery的? jquerymobile?我正在使用XAMPP。

由于

2 个答案:

答案 0 :(得分:2)

$players[$x]的值是<td style='width:150px;border:1px solid black;'>Amie</td>,这就是要打印的内容。第二个$players[$x]位于标签标签内,可能您没有注意到。

您可能尝试在浏览器上打印$player[$x],这就是为什么您没有看到td标记。请检查浏览器输出的来源,看看那里有什么。

同样<td style='width:150px;border:1px solid black;'>Amie</td>正好是57个字符长;它匹配你的print_r输出。

答案 1 :(得分:0)

原始答案

警告:由于recent comments,此答案有误。无论如何,这个答案解释了所描述现象可能发生的方式。

如果$players是对象而不是数组,那么您所描述的内容是可能的。

如果$players是实现Countable的类的对象,那么count ($players)相当于调用方法$players-> Count

此外,如果该类还实现了ArrayAccess,您可以像数组一样访问它。这是$players[$x]将等同于$players-> offsetGet ($x)。并且该方法的实现可以做任何事情,包括在每次调用时返回不同的值。

尝试以下操作,看看它是否实际上是一些自定义类:

echo get_class($players);

同时尝试以下方法:

var_dump($players);

您可以在另一天讨论print_r vs var_dump的优点。

新答案

comment中你说:

  

$ players是一个数组,$玩家[$ x]是一个字符串,两者都是预期的。但是,var_dump返回“string(57)Amie”。 String(57)是我得到的意外代码的长度。

如果您返回代码,则会将$players[$x]放在属性值中。我们在渲染出来的内容中找到的内容是:<td style='width:150px;border:1px solid black;'>Amie</td>。这似乎是你从$players[$x]得到的。

如果我输入我的代码:

<?php var_dump("<td style='width:150px;border:1px solid black;'>Amie</td>");

这是我在浏览器中看到的:

string(57) "Amie"

但如果我look at the source code of the page in the browser,则会显示:

string(57) "<td style='width:150px;border:1px solid black;'>Amie</td>"

那就是那里发生的事情。 Amie的值实际上是"<td style='width:150px;border:1px solid black;'>Amie</td>",但您在浏览器中看不到。