0

我想一一获取变量我做错了什么,为什么我不能把所有的数组都回显出来?

<?php
class get_all{
public $id;
public $product_name;
public $price;
public $date_added;
public $det;    
function get_detais(){

$sql = mysql_query("SELECT * FROM products  ORDER BY id DESC ");
$productCount = mysql_num_rows($sql); // count the output amount
$det=array();
if ($productCount > 0) {
    while($row = mysql_fetch_array($sql)){

            $id = $row["id"];
            $product_name = $row["product_name"];
            $price = $row["price"];
            $date_added = strftime("%b %d, %Y", strtotime($row["date_added"]));

      }return $det=array($id,$product_name,$price,$date_added);
} else {
    return $det= "We have no products listed in our store yet";
}
}
}
?>

在这里,我将函数称为数组元素:

<?php
$det=new get_all;

$det->get_detais();
echo $det[1];
?>
4

2 回答 2

0

您可以首先将第二段代码更改为:

<?php
$det=new get_all;

$a=$det->get_detais();
echo $a[1];
?>

...但这并非在所有情况下都有效,因为 (1)get_details()可能会返回一个字符串,并且 (2) 即使它是一个数组,它也可能包含少于两个元素。所以:

<?php
$det=new get_all;

$a=$det->get_detais();
if(is_array($a)&& count($a)>1)
  echo $a[1];
?>

作为旁注,在您的get_details()方法中,执行 areturn $var=...将毫无意义,因为通过returning 您退出函数并被$var破坏。

编辑:正如@a​​safreedman 指出的那样,您的方法不会像您期望的那样工作。你while应该是这样的:

while($row = mysql_fetch_array($sql)){
        $id = $row["id"];
        $product_name = $row["product_name"];
        $price = $row["price"];
        $date_added = strftime("%b %d, %Y", strtotime($row["date_added"]));
        $det[]=array($id,$product_name,$price,$date_added);
  }return $det;
于 2013-10-08T22:37:00.763 回答
0

基本的 PHP。您正在运行您的 while 循环并不断覆盖您获取的所有数据:

while($row = mysql_fetch_array($sql)) {
   $var = $row[...];
}

每次您获取新的数据行时,$var您上次保存的数据都会被新值丢弃。

您需要构建一个数据数组,例如更像

$data = array();
while($row = mysql_fetch_array($sql)) {
   $data[] = $row;
}
return $data;
于 2013-10-08T22:41:20.690 回答