Login   Register  
PHP Classes
elePHPant
Icontem

File: PHP_toolbucket/SoftMoon/array_subkey.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Joseph  >  Rainbow Maker  >  PHP_toolbucket/SoftMoon/array_subkey.php  >  Download  
File: PHP_toolbucket/SoftMoon/array_subkey.php
Role: Auxiliary script
Content type: text/plain
Description: PHP utility function
Class: Rainbow Maker
Create transparent gradient images
Author: By
Last change:
Date: 2012-02-12 21:40
Size: 4,614 bytes
 

Contents

Class file image Download
<?php /*  PHP_functions.php  written by and Copyright © 2009,2010 Joe Golembieski, SoftMoon WebWare

        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <http://www.gnu.org/licenses/>   */


Function preg_key_grep($A$preg$KeepKey=FALSE)  { $subA=array();
    
$keys=preg_grep($pregarray_keys($A));
    if (
$KeepKey)
        foreach (
$keys as $k)  {$subA[$k]=$A[$k];}
    else
        foreach (
$keys as $k)  {$subA[]=$A[$k];}
    return 
$subA;  }

Function 
is_iterateable($var) {
    return (
is_array($var)  or  is_object($var/*PHP>=5.3*/ and  !is_callable($var/**/ );  }

Define("KEEP_TREE"1);
Define("KEEP_KEY"2);
                                
//   ¤5•3
Function array_subkey($A$indxLevel$IDkey$KeepTree=FALSE)  {  $KeepKey=($KeepTree KEEP_KEY);
    if (
$indxLevel<2)  {
        if (
is_array($IDkey)  and  is_array($IDkey['filter']))  $IDkey=array_shift($IDkey['filter']);
        if (
$IDkey===NULL)  return $A;
//    if (is_callable($IDkey))  {  // non-object-oriented-PHP  [DANGER!  string-keyname / function-name collision]
        
if ( is_object($IDkey)
        and  
/* $flag=method_exists($IDkey, 'filter')   PHP < 5.3
        or */  
is_callable($IDkey)     /* PHP >= 5.3   [PREFERRED] */   )  {
            
$indx=$KeepTree;  $x=($flag) ? $IDkey->filter($A$indx) : $IDkey($A$indx);
            return (
$KeepKey  and  $x!==NULL  and  $indx!==NULL) ? array($indx => $x) : $x;  }
        else
        if (
is_array($IDkey))  { $subA=array();
            if (
is_array($IDkey['re-index']))  {$IDkey=$IDkey['re-index'];  $reindex=TRUE;}  //while only useful with "keep key", we process this here to allow the same filter to be used with and without the "keep key" option. Move it down one line for faster performance and strickter implementation.
            
if ($KeepKey)
                foreach (
$IDkey as $newindex => $key)  {
//          if (is_callable($IDkey))  {  // non-object-oriented-PHP   [DANGER!  string-keyname / function-name collision]
                    
if (is_object($key)
                    and  
/* PHP < 5.3   $flag=method_exists($key, 'filter')  */
                    /*or   PHP>=5.3 */ 
is_callable($key) )  { $indx=$KeepTree;
                        if ((
$x=($flag) ? $key->filter($A$indx) : $key($A$indx))!==NULL)  $subA[$indx]=$x;  continue;  }
                    if (
substr($key01)=="/")   {$subA=$subA+preg_key_grep($A$keyKEEP_KEY);  continue;}
                    if (
array_key_exists($key$A))  $subA[($reindex) ? $newindex $key]=$A[$key];  }
            else
                foreach (
$IDkey as $key)  {
//          if (is_callable($IDkey))  {  // non-object-oriented-PHP   [DANGER!  string-keyname / function-name collision]
                    
if (is_object($key)
                    and  
/* PHP < 5.3   $flag=method_exists($key, 'filter')  */
                    /*or   PHP>=5.3 */ 
is_callable($key) )  {
                        if ((
$x=($flag) ? $key->filter($A) : $key($A))!==NULL)  $subA[]=$x;  continue;  }
                    if (
substr($key01)=="/")   {$subA=array_merge($subApreg_key_grep($A$key));  continue;}
                    if (
array_key_exists($key$A))  $subA[]=$A[$key];  }  }
        else
        if (
substr($IDkey01)=="/")  {$subA=preg_key_grep($A$IDkey$KeepKey);}
        else  return (
$KeepKey  and  isset($A[$IDkey])) ? array($IDkey => $A[$IDkey]) : $A[$IDkey];  }
    else  {
        if (
is_array($IDkey)  and  is_array($IDkey['filter'])  and  ($filter=array_shift($IDkey['filter']))!==NULL)  {
            
$x=array_subkey($A1$filter$KeepKey);
            if (
is_array($filter)  or  @substr($filter01)=="/"  or  $KeepKey)  {
                
$indxLevel++;  array_unshift($IDkey['filter'], NULL);  }
            if (
is_iterateable($x)  and  $t=array_subkey($x$indxLevel-1$IDkey$KeepTree))  $subA=$t;  }
        else  { 
$subA=array();
        if (
$KeepTree)  {
            if (
$KeepKey)
                foreach (
$A as $indx => $data)  {
                    if (
is_iterateable($data)  and  NULL!==($t=array_subkey($data$indxLevel-1$IDkey$KeepTree)))  $subA[$indx]=$t;  }
            else
                foreach (
$A as $data)  {
                    if (
is_iterateable($data)  and  NULL!==($t=array_subkey($data$indxLevel-1$IDkey$KeepTree)))  $subA[]=$t;  }  }
        else
                foreach (
$A as $data)  {
                    if (
is_iterateable($data)  and  NULL!==($t=array_subkey($data$indxLevel-1$IDkey)))  {
                        if (
is_array($t)) $subA=array_merge($subA$t);  else  $subA[]=$t;  }  }  }  }
    return (
$subA  and  count($subA)) ? $subA NULL;  }
?>