开发者

Explode Flat File Result

I am using flat file db, not mysql so I can't use $limit

Function getbyfieldsw()

  /*!
* @function getbyfieldsw
* @abstract retrieves records in the database whose field matches the
* given regular expression.
* @param fieldname  the field which to do matching on
* @param regex  the regular expression to match a field on.
* Note: you should include the delimiters ("/php/i" for example).
* @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 matching records in an array, or false on failure
*/
   function getbyfieldsw($fieldname, $orderby = NULL, $includeindex = false)  {
  if (!$this->isopen)
  {
     user_error("Database not open.", E_USER_ERROR);
     return false;
  }

  // Check the field name
  if (!$this->key_exists_array($fieldname, $this->fields))
  {
     user_error(
        "Invalid field name for getbyfield: $fieldname", 
        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 开发者_StackOverflow= 0;
  foreach($index as $offset)
  {
     // Read the record
     list($record, $rsize) = $this->read_record($this->data_fp, $offset);

     // See if the record matches the regular expression
        // Add the index field if required
        if ($includeindex)
           $record[FFDB_INDEX_RECORDS_OFFSET] = $rcount;

        $result[] = $record;


     ++$rcount;
  }

  $this->unlock();

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

}

Function 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";
 }

Call records - here is the problem - this works except for the break; - I need to explode the flat file to read each record individually, then add to the foreach():

 $result = $db->getbyfieldsw(lp_month);
 $i = 0;
 foreach ($result as $item){
      show_record($item);
 if ($i >= 2) 
 break;
 }

Since this is flat file, when calling the function getbyfieldsw() the file comes flat as a single file, no matter how many records on it, records = 1 or records = 100 is the same at this point.

Break; does not work because all records come as single record - therefore nothing to break.

What I want to do is split/explode the records, count them, and based on my if statement post:

if $i == 0 echo "content1";
if $i == 1 echo "content2";
if $i > 1 echo "content 3";

I got held here for the past 3 days...exhausted all solutions.

HELP glad appreciated Thanks


Sorry for not helping your code directly, but you should consider switching to SQLITE instead of using your own database system. SQLITE is flat, open-source, efficient and easier to work with. PHP's sqlite module has everything you need. You should check it out!

http://www.sqlite.org/about.html http://php.net/manual/en/book.sqlite.php

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜