Ограничить количество записей php — плоский файл

Я использую базу данных с плоским файлом, а не mysql, поэтому я не могу использовать $limit

Мне нужно ограничить количество записей до 1, если больше 1, то повторяется что-то еще:

$result = $db->getall(lmonth);
foreach($result as $item)
     show_record($item);
}

Функция getall()

 /*!
    * @function getall
    * @abstract retrieves all records in the database, each record in an array
        * element.
    * @param orderby  order the results.  Set to the field name to order by
    * (as a string). If left unset, sorting is not done and it is a lot faster.
    * If prefixed by "!", results will be ordered in reverse order.  
    * If orderby is an array, the 1st element refers to the field to order by,
    * and the 2nd, a function that will take two take two parameters A and B 
        * - two fields from two records - used to do the ordering.  It is expected 
    * that the function would return -ve if A < B and +ve if A > B, or zero 
    * if A == B (to order in ascending order).
    * @param includeindex  if true, an extra field called 'FFDB_IFIELD' will
    * be added to each record returned.  It will contain an int that specifies
    * the original position in the database (zero based) that the record is 
    * positioned.  It might be useful when an orderby is used, and an future 
    * operation on a record is required, given it's index in the table.
    * @result all database records as an array
    */
   function getall($orderby = NULL, $includeindex = false)
   {
      if (!$this->isopen)
      {
         user_error("Database not open.", E_USER_ERROR);
         return false;
      }

      // If there are no records, return
      if ($this->records == 0)
         return array();

      if (!$this->lock_read())
         return false;

      // Read the index
      $index = $this->read_index();

      // Read each record and add it to an array
      $rcount = 0;
      foreach($index as $offset)
      {
         // Read the record
         list($record, $rsize) = $this->read_record($this->data_fp, $offset);

         // Add the index field if required
         if ($includeindex)
            $record[FFDB_IFIELD] = $rcount++;

         // Add it to the result
         $result[] = $record;
      }

      $this->unlock();

      // Re-order as required
      if ($orderby !== NULL)
         return $this->order_by($result, $orderby);
      else
         return $result;
   }

Функция show_record()

   function show_record($record){
      $month = $record["lmonth"];
      $status = $record["lstatus"];
      $year = $record["lyear"];
   }
if (($status == ON) && ($month >= $current_month) && ($year >= $current_year)){
 echo "foo";
 }

Я пытался использовать break, но он возвращает 0 (ноль) записей.

Я пытался использовать $i = 0... но он вернул все или ничего

Любые идеи? Спасибо


person cchap    schedule 13.07.2011    source источник
comment
Расскажите нам больше о том, чем занимаются getall() и show_record()?   -  person Jason McCreary    schedule 14.07.2011
comment
Я только что добавил getall() и show_record() выше...   -  person cchap    schedule 14.07.2011
comment
и почему вы не используете mySql?   -  person genesis    schedule 14.07.2011


Ответы (2)


Как насчет чего-то подобного?

function getall($orderby = null, $includeindex = false, $limit = null) {

    ...

    if ($orderby !== null) {
        $result = $this->order_by($result, $orderby);
    }
    if ($limit) {
        return array_slice($result, 0, $limit);
    }
    return $result;
}
person deceze♦    schedule 14.07.2011
comment
deceze, $limit вернул первый ключ записи, а не запись, которую вызывает оператор if - person cchap; 14.07.2011
comment
@cchap Я упустил из виду порядок, который требует предварительного чтения всех записей, обновленный ответ. - person deceze♦; 14.07.2011
comment
Я только что добавил оператор if под функцией show_record(). - person cchap; 14.07.2011
comment
Я должен распечатать запись, которую хочу, выполнив: $result = $db->getall(lp_month); $i = 0; foreach($result as $item){ show_record($item); если($i›=2) перерыв; } но я не мог остановить его после 1 - person cchap; 14.07.2011
comment
Я сделал обновление, но все еще только первая запись, когда я выключил первую запись (статус $), я получил пустую страницу ...., поэтому она не перешла к следующей записи. Ближайший результат, который я получил, был, когда я использовал $i = 0 в foreach(), но это не помешало показать несколько записей, когда true - person cchap; 14.07.2011
comment
@cchap Ваши функции show_record кажутся бессмысленными, вы уверены, что ваша проблема не просто в этом? Попробуйте var_dump по результатам getall. - person deceze♦; 14.07.2011
comment
Я тоже пробовал var_dump, но это не сработало. Вот в чем дело, при вызове записи путем нажатия на ссылку из очереди результат работает отлично, проблема в том, что при динамическом выполнении, по-видимому, игнорируются некоторые команды оператора if, я также пробовал switch() тот же случай. Я также попробовал java-подход, пытаясь имитировать действие › результат очереди › щелкнуть запись желаемого › показать запись … но я не смог найти скрипт, который выполнял бы 3 действия для тела onload (). - person cchap; 14.07.2011
comment
@cchap Честно говоря, я сдаюсь. Если у вас ничего не работает, вы делаете что-то не так. Вы также, кажется, везде одновременно. Попробуйте выполнить пошаговую отладку (например, используя var_dump). - person deceze♦; 14.07.2011
comment
Я слышу вас, но это единственное, что держит мой проект, я занимаюсь этой проблемой последние 48 часов, так что я буквально повсюду. На данный момент я бы согласился на СООБЩЕНИЕ ОБ ОШИБКЕ, если результат больше 1... это моя цель на завтра... вы дали мне несколько идей, спасибо!! - person cchap; 14.07.2011
comment
Я могу знать, в чем проблема... оператор if вызывается после foreach, завтра я попытаюсь настроить foreach, чтобы включить оператор if, чтобы увидеть, работает ли он, но тогда у меня возникнет проблема с show_record( ) - person cchap; 14.07.2011

РЕШЕНИЕ

Print_r сделал свое дело, и я использовал эхо:

   print_r (show_record($row));

Вот как у меня работает окончательный код:

$result = $db->getall(lp_month,lp_year);
$i = 0;
foreach ($result as $row){
   print_r (show_record($row));
if ($i >= 1) 
 break;
$i++;
}

Теперь с нетерпением жду решения других мелких проблем, спасибо

person cchap    schedule 15.07.2011