Contact me at : hello[at]gauravjassal[dot]com
This simple yet powerful class to filters an array and breaks in to a categorized array format.You can use this class if you are dealing with large and complex array and want to convert it into and simple array that is easy to understand and use. Recently i required a function that can categorize an array and break it into categorize format.I couldn’t find any core function to do that so i decided to create my own class that can do this job for me. I have also added an example to demonstrate the usage to its benefit. Make sure you comment it if you find it useful.
$arrProducts=array( array( "product_id" => "007", "product_name" => "Blackberry R-900 Mobile", "product_price" => "£450", "product_status" =>"1", "product_category" =>"Mobile" ), array( "product_id" => "033", "product_name" => "8 GB Pendrive", "product_price" => "£14.99", "product_status" => "0", "product_category" => "Computers" ) );
Here is the class that converts the array to and organize format. The constructor take two arguments first the Array you want to format and the second category key you want to filter by.Then you have to call makeTree() function to format the array. The makeTree() function will return you the organized array.
<?php
/**
* Array2ArrayTree
* @package
* @author Gaurav Jassal
* @copyright http://www.gauravjassal.com
* @version 1.0
* @access public
*/
class Array2ArrayTree
{
public $arrOriginal = array();
public $arrDummy = array();
public $strKey = "";
/**
* Array2ArrayTree::__construct()
*
* @param $arrData Array
* @param $arrKey String
* @return
*/
public function __construct($arrData, $arrKey)
{
$this->arrOriginal = $arrData;
$this->strKey = $arrKey;
$this->arrDummy = array();
}
/**
* Array2ArrayTree::makeTree()
*
* @return Array
*/
public function makeTree()
{
for ($i = 0; $i <= sizeof($this->arrOriginal) - 1; $i++) {
$keyPosition = $this->searchKey($this->arrOriginal[$i][$this->strKey]);
if ($keyPosition == -1) {
$this->addNode($this->arrOriginal[$i]);
} else {
$this->appendNode($this->arrOriginal[$i], $keyPosition);
}
}
return $this->arrDummy;
}
/**
* Array2ArrayTree::searchKey()
*
* @param $strCurrentValue String
* @return
*/
function searchKey($strCurrentValue)
{
for ($i = 0; $i <= sizeof($this->arrDummy) - 1; $i++) {
if ($this->arrDummy[$i][0][$this->strKey] == $strCurrentValue) {
return $i;
}
}
return - 1;
}
/**
* Array2ArrayTree::addNode()
*
* @param $arrNode Array
* @return
*/
function addNode($arrNode)
{
$this->arrDummy[sizeof($this->arrDummy)][0] = $arrNode;
}
/**
* Array2ArrayTree::appendNode()
*
* @param $arrNode Array
* @param $keyPosition Integer
* @return
*/
function appendNode($arrNode, $keyPosition)
{
array_push($this->arrDummy[$keyPosition], $arrNode);
}
}
?>
Usage
<?php
require_once("array2arraytree.php");
$arrProducts=array(
array(
"product_id" => "007",
"product_name" => "Blackberry R-900 Mobile",
"product_price" => "£450",
"product_status" =>"1",
"product_category" =>"Mobile"
),
array(
"product_id" => "033",
"product_name" => "8 GB Pendrive",
"product_price" => "£14.99",
"product_status" => "0",
"product_category" => "Computers"
),
array(
"product_id" => "033",
"product_name" => "The White Tiger – Aravind Adiga",
"product_price" => "£29.99",
"product_status" => "1",
"product_category" => "Books"
),
array(
"product_id" => "4501",
"product_name" => "The Final Reckoning - Sam Bourne",
"product_price" => "£19.99",
"product_status" => "0",
"product_category" => "Books"
),
array(
"product_id" => "001",
"product_name" => "Wespro Multi-SIM &amp;amp;amp; Touch-screen Mobile",
"product_price" => "£150",
"product_status" => "1",
"product_category" => "Mobile"
),
array(
"product_id" => "004",
"product_name" => "Sigmatel MP4/MP3 + Camera Mobile",
"product_price" => "£150",
"product_status" => "1",
"product_category" => "Mobile"
),
array(
"product_id" => "034",
"product_name" => "The Final Reckoning - Sam Bourne",
"product_price" => "£15.79",
"product_status" => "0",
"product_category" => "Books"
),
array(
"product_id" => "334",
"product_name" => "250 GB Portable Hard Drive",
"product_price" => "£79.99",
"product_status" => "1",
"product_category" => "Computers"
)
);
$objTree=new Array2ArrayTree($arrProducts,"product_category");
$arrTree=$objTree->makeTree();
print("
");
print_r($arrTree);
print("
");
?>
Array ( [0] => Array ( [0] => Array ( [product_id] => 007 [product_name] => Blackberry R-900 Mobile [product_price] => £450 [product_status] => 1 [product_category] => Mobile ) [1] => Array ( [product_id] => 001 [product_name] => Wespro Multi-SIM &amp;amp;amp; Touch-screen Mobile [product_price] => £150 [product_status] => 1 [product_category] => Mobile ) [2] => Array ( [product_id] => 004 [product_name] => Sigmatel MP4/MP3 + Camera Mobile [product_price] => £150 [product_status] => 1 [product_category] => Mobile ) ) [1] => Array ( [0] => Array ( [product_id] => 033 [product_name] => 8 GB Pendrive [product_price] => £14.99 [product_status] => 0 [product_category] => Computers ) [1] => Array ( [product_id] => 334 [product_name] => 250 GB Portable Hard Drive [product_price] => £79.99 [product_status] => 1 [product_category] => Computers ) ) [2] => Array ( [0] => Array ( [product_id] => 033 [product_name] => The White Tiger – Aravind Adiga [product_price] => £29.99 [product_status] => 1 [product_category] => Books ) [1] => Array ( [product_id] => 4501 [product_name] => The Final Reckoning - Sam Bourne [product_price] => £19.99 [product_status] => 0 [product_category] => Books ) [2] => Array ( [product_id] => 034 [product_name] => The Final Reckoning - Sam Bourne [product_price] => £15.79 [product_status] => 0 [product_category] => Books ) ) )
You can download the files here
This extension notifies you with latest London underground tube updates. You can click on the browser button and check the status of any tube line.By default the extension updates the status in every 5 mins.
In the second example I am going to use Standard PHP Library (SPL) to notify all attendees about the party location change. SPL has 2 interfaces and a Class for Observer.
The Observer pattern defines a mechanism by which components can opt-in to receive messages when a target object changes its state. Its works similar to Listening to a Change event for a object or Trigger in a database
© 2008
Gaurav Jassal