我知道这不是最好的方式或正确方法,但可以使用解释为什么这不起作用。如果我不把它放在一个类中,相同的代码可以工作。 test.php显示了显示数组但我无法显示数组。非常感谢一个很好的例子。
<?php
class Photo
{
public $id;
public $categories;
public $img_name;
public $myArray = array();
public function findAll()
{
$dbConnection = mysqli_connect("localhost", "root", "root", "gallery");
$query = "SELECT * FROM images";
$stmt = mysqli_prepare($dbConnection,$query);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $id, $categories,$img_name);
while(mysqli_fetch($stmt)) {
array_push($this->myArray,$id);
}
return $this->myArray;
}
}
?>
test.php的
<?php
require_once ('photo.php');
$obj = new Photo();
$obj->findAll();
echo "<pre>";
var_dump($obj);
echo "</pre>";
foreach ($obj as $val) {
echo "$val <br/>";
}
?>
当我运行页面时,我得到了
object(Photo)#1 (4) {
["id"]=>
NULL
["categories"]=>
NULL
["img_name"]=>
NULL
["myArray"]=>
array(10) {
[0]=>
int(447)
[1]=>
int(448)
[2]=>
int(449)
[3]=>
int(439)
[4]=>
int(440)
[5]=>
int(435)
[6]=>
int(431)
[7]=>
int(432)
[8]=>
int(433)
[9]=>
int(434)
}
}
Array
答案 0 :(得分:1)
你是var_dumping对象,而不是数组。
这将有效:
require_once ('photo.php');
$obj = new Photo();
foreach ($obj->findAll() as $val) {
echo "$val <br/>";
}
或者确实:
$items = $obj->findAll();
foreach($items as $val)
{
echo $val . '<br />';
}
答案 1 :(得分:0)
你没有犯错误。您没有指定$obj->findAll();
的值
像这样改变test.php
<?php
require_once ('photo.php');
$obj = new Photo();
$array=$obj->findAll();
echo "<pre>";
var_dump($array);
echo "</pre>";
foreach ($array as $val) {
echo "$val <br/>";
}
?>
答案 2 :(得分:0)
替换
foreach ($obj as $val) {
通过
foreach ($obj->myArray as $val) {
或
foreach ($obj->findAll() as $val) {
答案 3 :(得分:0)
您正在尝试迭代一个对象,如php manual中所述。
这样你遍历对象中的每个属性,因此$ val按顺序获取$ id,$ categories,$ img_name和$ myArray的值。你的echo语句会出现3个换行符(因为前3个属性为null,字符串上下文中的null转换为空字符串)和“Array”字后跟换行符(因为这是将数组转换为字符串的方式)上下文)。
您可能想要遍历数组本身,然后使用任何其他答案。