GithubHelp home page GithubHelp logo

tony2001 / php-judy Goto Github PK

View Code? Open in Web Editor NEW

This project forked from orieg/php-judy

3.0 3.0 0.0 442 KB

PHP Extension for libJudy

Home Page: http://pecl.php.net/package/Judy

License: Other

PHP 47.34% C 52.66%

php-judy's Introduction

        PHP Judy - extension creating and accessing dynamic arrays
     ================================================================

Content
---------
 1. Introduction
 2. Directory Contents
 3. How to install
 4. Usage (Examples)
 5. Reporting Bugs
 6. Todo


1. INTRODUCTION
-----------------

php-judy is an extension by Nicolas Brousse for the Judy C library.
  -> http://pecl.php.net/package/Judy
  -> http://github.com/orieg/php-judy

(see Section 4 of this document for PHP examples)

A Judy array is a complex but very fast associative array data structure for
storing and looking up values using integer or string keys. Unlike normal
arrays, Judy arrays may be sparse; that is, they may have large ranges of
unassigned indices.

  -> http://en.wikipedia.org/wiki/Judy_array

The PHP extension is based on the Judy C library that implements a dynamic array.
A Judy array consumes memory only when populated yet can grow to take advantage
of all available memory.  Judy's key benefits are:  scalability, performance,
memory efficiency, and ease of use. Judy arrays are designed to grow without
tuning into the peta-element range, scaling near O(log-base-256) -- 1 more RAM
access at 256 X population.

  -> http://judy.sourceforge.net

2. PHP JUDY TOP DIRECTORY CONTENTS:
------------------------------------

README       This file.
LICENSE      The PHP License used by this project.
EXPERIMENTAL Note about the status of this package.

lib/         Header and source libraries used by the package.
libjudy/     Bundled libJudy.      
tests/       Unit tests.
*.c, *.h     Header and source files used to build the package.
*.php        PHP test/examples scripts.


3. HOW TO INSTALL
------------------

 A. Linux

   From the PHP Judy sources :

     phpize
     ./configure --with-judy[=DIR]
     make
     make test
     make install

   If you are using Ubuntu or Debian, you can install libJudy with apt :

     apt-get install libjudydebian1 libjudy-dev
     phpize
     ./configure --with-judy=/usr
     make
     make test
     make install
  
 B. Windows

   On Windows, you will need to build LibJudy yourself.

   Download the sources at 

     http://sourceforge.net/projects/judy/
	  
   Extract the sources, and open the Visual Studio command prompt and navigate to 
   the source directory. Then execute:

     build
	  
   This creates "Judy.lib", copy this into the php-sdk library folder and name it 
 
     libJudy.lib
	 
   Then copy the include file "judy.h" into the php-sdk includes folder. Now its 
   time to build pecl/judy, extract the pecl/judy into your build folder where 
   the build scripts will be able to pick it up, e.g.:
	
     C:\php\pecl\judy\
	 
   If your source of PHP is located in:
	
     C:\php\src\
	 
   The rest of the steps is pretty straight forward, like any other external 
   extension:
	
     buildconf
     configure --with-judy=shared
     nmake

 C. Mac OS X

   You will need to install the libJudy first. Download the sources at 

     http://sourceforge.net/projects/judy/
	  
   Extract the sources, then cd into the source directory and execute :

     ./configure
     make
     make install

   Use pecl to install the PHP Judy extension :

     sudo pecl -d preferred_state=beta install Judy


4. USAGE (EXAMPLES)
------------------

Judy's array can be used like usual PHP arrays. The difference will be in the
type of key/values that you can use. Judy arrays are optimised for memory usage
but it force to some limitation in the PHP API.

There is currently 5 type of PHP Judy Arrays :
 - BITSET (using Judy1)
 - INT_TO_INT (using JudyL)
 - INT_TO_MIXED (using JudyL)
 - STRING_TO_INT (using JudySL)
 - STRING_TO_MIXED (using JudySL)

You can use foreach() and the PHP array notation on all PHP Judy arrays.

  A. BITSET

  Bitset implementation is quite basic for now. It allow you to set a bunch of index
  setting the value to false will be the same than using unset().

    $bitset = new Judy(Judy::BITSET);
    $bitset[124] = true;
    ...
 
    print $bitset[124]; // will print 1
 
    $bitset[124] = false; // is the same as unset($bitset[124])

  B. INT_TO_INT

  This type let you create an array with key and value of integer, and integer only.

    $int2int = new Judy(Judy::INT_TO_INT);
    $int2int[125] = 17;
    ...

    print $int2int[125]; // will print 17

  C. INT_TO_MIXED

  This type let you create an array with key as integer and value of any type, including
  other judy array or any object.

    $int2mixed = new Judy(Judy::INT_TO_MIXED);
    $int2mixed[1] = "one";
    $int2mixed[2] = array('a', 'b', 'c');
    $int2mixed[3] = new Judy(Judy::BITSET);

  D. STRING_TO_INT

  This type let you create an array with key as string (currently limited to 65536 char.)
  and an integer as the value.

    $string2int = new Judy(Judy::STRING_TO_INT);
    $string2int["one"] = 1;
    $string2int["two"] = 2;

    print $string2int["one"]; // will print 1

  E. STRING_TO_MIXED

  This type let you create an array with key as string and values of any type, including
  other judy array or any objects.

    $string2mixed = new Judy(Judy::STRING_TO_MIXED);
    $string2mixed["string"] = "hello world!";
    $string2mixed["array"] = array('a', 'b', 'c');
    $string2mixed["integer"] = 632;
    $string2mixed["bitset"] = new Judy(Judy::BITSET);


5. REPORTING BUGS
------------------

If you encounter a bug, please submit it via the bug tracker on Git Hub:

  https://github.com/orieg/php-judy/issues


6. TODO
--------

 * Implements comparator and cast handler
 * Add bitset comparator (cf. Judy1Op sample)

php-judy's People

Contributors

cesaredamico avatar jeremyfreeagent avatar orieg avatar sannis avatar tony2001 avatar weltling avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.