2013-10-08 42 views
0

我想逐個獲取變量我做錯了什麼,爲什麼我不能讓所有的數組回顯出來?方法不會返回值無法使用對象作爲數組php

<?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]; 
?> 
+2

你期望回聲'$ det [1]'是什麼? $ det是一個對象,不是一個數組....雖然你也使用get_detais()中的一個名爲$ det的本地變量,這會讓試圖讀取你的代碼的人感到困惑。 '$ returnedArray = $ det-> get_detais(); echo $ returnedArray [1];' –

+0

除此之外,還有其他一些錯誤的代碼。你會意識到,如果你有不止一行從MySQL返回的行,你將覆蓋'$ id'和朋友的值。所以,你只會得到你從數據庫檢索到的最後一行。 – asafreedman

回答

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()方法,做一個return $var=...是毫無意義的,因爲return荷蘭國際集團退出的功能和$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; 
0

基本的PHP。您正在運行while循環,不斷改寫你獲取所有數據:

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

每次獲取數據的新行,你周圍的最後一次保存的$var得到新值丟棄。

您需要構建一個數據數組,例如更像

$data = array(); 
while($row = mysql_fetch_array($sql)) { 
    $data[] = $row; 
} 
return $data;