2010-12-18 3 views
0

Я не могу понять это. Я создал простой класс, который возвращает массив массивов. Вот класс contructor ...Не удается получить доступ к элементам массива

class BlogComments { 
public $commentArray=array(); 
public $blogId; 

function __construct($inId) { 
    if(!empty($inId)) { 
     $this->blogId=$inId; 
     $sql="select id,name,url,comment,email from blog_comment where blog_id=$inId"; 
     $link2=GetConnection(); 
     $query=mysql_query($sql,$link2) or die("Invalid blog id:".mysql_error()); 
     while($row=mysql_fetch_array($query)) { 
      $this->commentArray=array(
       "id"=>$row['id'], 
       "name"=>$row['name'], 
       "url"=>$row['url'], 
       "email"=>$row['email'], 
       "comment"=>$row['comment'] 
      ); 
     } 
     mysql_close($link2); 
    } 
} 
} 

Я пытаюсь получить доступ к каждому члену массива через цикл. Он вводит цикл, но возвращаемые значения пустые. Я проверил, что данные записываются в массив. Вот мой код ...

include "include/commentclass.php"; 
$comments = new BlogComments($post->id); 
foreach($comments as $comment) { 
    echo "<h4>".$comment->commentArray['name']."</h4> 
     <a href=\"".$comment->commentArray['url']."\">".$comment->commentArray['url']."</a> 
     <p>".$comment->commentArray['comment']."</p>"; 
} 

В основном это возвращает пустые теги. Я также проверил, что $ post-> id имеет действительное значение. Любые идеи, что я делаю неправильно?

Спасибо за помощь, B

+0

Вы не можете перебирать объект по ссылке Ссылка. Как говорит netcoder в своем ответе, вы должны реализовать Traversable, чтобы сделать это. Или просто реализуйте метод в своем классе, который даст вам $ commentArray. – Andreas

ответ

0

Попробуйте это:

$comments = new BlogComments($post->id); 
foreach ($comments->commentArray as $comment) { 
    echo "<h4>".$comment['name']."</h4> 
     <a href=\"".$comment['url']."\">".$comment['url']."</a> 
     <p>".$comment['comment']."</p>"; 
} 

new ключевое слово возвращает один объект. Если ваш объект (BlogComments) не использует Traversable, foreach будет действовать на общественные объекты commentArray и blogId, а не на commentArray.

Вы также можете реализовать свой класс интерфейса Iterator.

+0

Вы оба правы. Хотел бы я дать ответ обоим. – bflemi3

1

Вы делаете некоторые ошибки, первый указывает, что один netcoder указал: вы используете объект как массив без реализации интерфейса Iterator. Во-вторых, вы непосредственно присваиваете массив результатов $this->commentArray. Вы должны добавить результат в массив таким образом: $this->commentArray[] = array(

+0

Вы оба правы. Мне нужно было добавить результат в массив, как вы заявили, и используя код netcoders, я смог заставить его работать. Спасибо вам обоим! – bflemi3

+0

+1 @Minkiele: Хороший звонок, я не видел отсутствующих '[]' там. – netcoder

Смежные вопросы