2015-02-19 2 views
0

Im, создающий функцию, которая циклически проходит по всем строкам базы данных MySQL, затем заполняет кучу привязанных тегов конкретными данными, относящимися к текущему идентификатору It on. Моя проблема заключается в том, что он будет заполнять только первый тег информацией, а другие после него в зависимости от того, в какой строке он должен быть включен. Код, мы надеемся, лучше объяснит это.Цикл через все строки в MySQL с использованием цикла foreach

public function getLinks() { 
     $output = ""; 

     $data = $this->_db->get('SELECT *', 'shutins', array('id', '>', 0)); 

     echo $data->count(); // Currently returns 2 

     for($i = 1; $i < ($data->count() + 1); $i++) { // Set the count to 3 to make sure it should continue 
      $this->find($i); // Gets the first row only 
      $output .= "<a href=\"shutin.php?id={$this->data()->id}\" class=\"link\"><span>{$this->getName()}</span> <img class=\"next\" src=\"img/next.png\" width=\"20\"/></a>"; 
      $i++; // Doesn't seem to increment then start again 
     } 

     return $output; 
    } 

Если вам нужно увидеть больше моих файлов кода, я рад предоставить их.

+1

Так что конкретно вы спрашиваете? С чем вы сталкиваетесь? – rayryeng

+0

В настоящее время он дает мне только первую строку данных, когда мне нужно также получить доступ к каждой другой строке, чтобы заполнить список. – hightekjonathan

+0

ОК. Возможно, вам следует обновить свой пост, чтобы это отразить. Неясно, каков ваш вопрос, если кто-то не читает нить комментария. – rayryeng

ответ

1

Вы удваиваете приращение переменной $i. Третий «параметр» цикла for представляет собой операторы для выполнения после каждой итерации. Ваш первый цикл будет иметь $i как 1, затем, когда он начнет вторую итерацию $i, будет три. Он проверит ваше состояние ($i < ($data->count() + 1)), которое будет ложным, и цикл закончится.

Сторона примечания; второй «параметр» цикла - для операторов, которые должны выполняться (и проверяться) на , начинающемся каждой итерации. Более эффективный способ написания цикла будет:

for($i = 1, $count = $data->count() + 1; $i < $count; $i++) { 

Это происходит потому, что подсчет и добавление выполняются для заполнения переменной $count происходит только один раз, а не для каждой итерации цикла.

+0

У меня изначально не было второго '$ i ++;' и он по-прежнему не увеличивался правильно. У меня было эхо из текущего '$ i', и он все еще показывает его только в 1-м цикле. Я также не знал, что могу объявить более одного параметра в цикле for. – hightekjonathan

+0

Вы вызываете '$ this-> find()', когда вы должны вызывать '$ data-> something()'? – Scopey

+0

'$ this-> find()' получает все данные для текущего идентификатора пользователя. – hightekjonathan

1

Вы увеличиваете переменную $i два раза в цикле. Снимите от вашей петли

for($i = 1; $i <= $data->count(); $i++) { // You can use "<=" instead of ($data->count() + 1) to make it simple 

    $this->find($i); // Gets the first row only 
    $output .= "<a href=\"shutin.php?id={$this->data()->id}\" class=\"link\"><span>{$this->getName()}</span> <img class=\"next\" src=\"img/next.png\" width=\"20\"/></a>"; 

} 
+0

Я иногда забываю свои операнды. Но проблема в основном заключалась в том, что в первый раз он не увеличивался бы должным образом, поэтому я попытался сделать это снова, но без толку, но теперь у меня это работает. – hightekjonathan

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