Opensource ByJG Build Status Opensource ByJG GitHub source GitHub license GitHub release Scrutinizer Code Quality Code Coverage

Anydataset Core Module. Anydataset is an agnostic data source abstraction layer in PHP.


  • Access different data sources using the same interface.
  • Iterable results
  • Convert results to array

Current Implementations

Object Data Source Read Write Reference
DbDriverInterface Relational DB yes yes Github
AnyDataSet Anydataset yes yes Github
ArrayDataSet Array yes no Github
TextFileDataSet Delimited Fields yes no Github
FixedTextFileDataSet Fixed Size fields yes no Github
XmlDataSet Xml yes no Github
JSONDataSet Json yes no Github
SparQLDataSet SparQl Repositories yes no Github
NoSqlDocumentInterface NoSql Document Based yes yes Github
KeyValueInterface NoSql Key/Value Based yes yes Github


Iterating with foreach

$dataset = new \ByJG\AnyDataset\Core\AnyDataset("example");

$iterator = $dataset->getIterator();
foreach ($iterator as $row) {
    print $row->toArray();

Filtering results

$filter = new \ByJG\AnyDataset\Core\IteratorFilter();
$filter->addRelation("field1", \ByJG\AnyDataset\Core\Enum\Relation::EQUAL, 10);
$iterator2 = $dataset->getIterator($filter);

Converting to Array

$iterator = $dataset->getIterator();

Iterating with While

$iterator = $dataset->getIterator();
while ($iterator->hasNext()) {
    $row = $iterator->moveNext();


foreach ($iterator as $row) {

Additional Classes

RowOutpout - Format Field Output

This class defines custom format for the field output.

$output = RowOutput::getInstance()
    ->addFormat("field1", "Test {field1}")
    ->addFormat("field2", "Showing {} and {field3}");
    ->addCustomFormat("field3", function ($row, $field, $value) {
        // return the formatted output. 
        // $row: The row object with all values
        // $field: The field has been processed
        // $value: The field value

// This will output the field1 formatted:
echo $output->print($row, "field1");

// This will apply the format defintion to all fields at once:

Notes about the format pattern:

  • {} represents the current value
  • {.} represents the field name
  • {field_name} return the value of $row->get(field_name)

RowValidator - Validate Field contents

$validator = RowValidator::getInstance()
    ->requiredFields(["field1", "field2"])
    ->numericFields(['field1', 'field3'])
    ->regexValidation("field4", '/\d{4}-\d{2}-\d{2}/')
    ->customValidation("field3", function($value) {
        // Return any string containing the error message if validation FAILS
        // otherwise, just return null and the valition will pass. 

$validator->validate($row) // Will return an array with the error messages. Empty array if not errors. 


AnyDataset comes with an extensible set to format the AnyDataset. The interface is:

namespace ByJG\AnyDataset\Core\Formatter;

interface FormatterInterface 
     * Return the object in your original format, normally as object
     * @return mixed
    public function raw();

     * Return the object transformed to string.
     * @return string
    public function toText();

     * Save the contents to a file
     * @param string $filename
     * @return void
    public function saveToFile($filename);

AnyDataset implements two formatters:

  • JsonFormatter
  • XmlFormatter


$formatter = new XmlFormatter($anydataset->getIterator());
$formatter->raw(); // Return a DOM object
$formatter->toText(); // Return the XML as a text
$formatter->saveToFile("/path/to/file.xml");  // Save the XML Text to a file. 


Just type: composer require "byjg/anydataset=4.1.*"

Running Unit tests


Open source ByJG