PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

array_change_key_case> <rename_function
Last updated: Sun, 25 Nov 2007

view this page in

Array Functies

Deze functies maken het gebruik en de manipulatie van arrays mogelijk op verschillende manieren. Arrays zijn essentieel voor het bewaren en beheren van sets van variabelen.

Simpele en multi-dimensionale arrays worden ondersteund en kunnen door gebruikers of een andere functie worden gemaakt. Er zijn specifieke database handling functies die arrays invullen aan de hand van database queries en verschillende functies geven arrays terug.

Je kunt de Arrays sectie van de manual bekijken voor een gedetailleerde uitleg over hoe arrays worden geïmplementeerd en gebruikt in PHP.

Afhankelijkheden

Deze functies zijn beschikbaar als onderdeel van de standaard module die altijd beschikbaar is.

Installatie

Deze extensie gebruikt geen configuratie regels.

Configuratie tijdens scriptuitvoer

Deze extensie gebruikt geen configuratie regels.

Resource types

Deze extensie maakt geen gebruik van resources.

Voorgedefinieerde constanten

De constanten die hier staan zijn altijd aanwezig als een onderdeel van de PHP kern.

CASE_LOWER (integer)
CASE_LOWER wordt gebruikt met array_change_key_case() om array keys in kleine letters te veranderen. Dit is tevens de standaard optie voor array_change_key_case().
CASE_UPPER (integer)
CASE_UPPER wordt gebruikt met array_change_key_case() om array keys in hoofdletters te veranderen.

Sorteervolgorde:

SORT_ASC (integer)
SORT_ASC wordt gebruikt met array_multisort() om in oplopende volgorde te sorteren.
SORT_DESC (integer)
SORT_DESC wordt gebruikt met array_multisort() om in aflopende volgorde te sorteren.

Sorteertypen: gebruikt door diverse sorteerfuncties

SORT_REGULAR (integer)
SORT_REGULAR wordt normaal gebruikt om items te vergelijken.
SORT_NUMERIC (integer)
SORT_NUMERIC wordt gebruikt om items numeriek te vergelijken.
SORT_STRING (integer)
SORT_STRING wordt gebruikt om items als strings te vergelijken.

Table of Contents

  • array_change_key_case — Geeft een array terug met alle string keys in lowercase of uppercase karakters
  • array_chunk — Verdeel een array in stukken
  • array_combine — Maak een nieuwe array door gebruik te maken van een bestaande array voor de keys en een andere voor de waarden
  • array_count_values — Telt alle waarden in een array
  • array_diff_assoc — Berekent het verschil tussen arrays met een toegevoegde index controle
  • array_diff_key — Bereken het verschil tussen arrays gebruikmakend van de keys voor de vergelijking
  • array_diff_uassoc — Berekent het verschil tussen arrays met een additionele index controle, die wordt uitgevoerd door een gebruikersfunctie
  • array_diff_ukey — Bereken het verschil tussen arrays gebruikmakend van een gebruikersfunctie voor de vergelijking van de keys
  • array_diff — Berekent het verschil tussen arrays
  • array_fill_keys — Fill an array with values, specifying keys
  • array_fill — Vul een array met waarden
  • array_filter — Filtert elementen van een array via een callback functie
  • array_flip — Verwisselt alle keys met de geassocieerde waarden in een array
  • array_intersect_assoc — Berekent de intersectie van arrays met een extra index check
  • array_intersect_key — Berekent de overeenkomst tussen arrays gebruikmakend van de keys voor de vergelijking
  • array_intersect_uassoc — Berekent de overeenkomst tussen arrays met een aanvullende index controle, waarbij de indices worden vergeleken door een gebruikersfunctie
  • array_intersect_ukey — Berekent de overeenkomst tussen arrays gebruikmakend van een gebruikersfunctie op de keys ter vergelijking
  • array_intersect — Berekent de intersectie van arrays
  • array_key_exists — Kijkt of de gegeven key of index bestaat in de array
  • array_keys — Geeft alle keys van een array terug
  • array_map — Past de callback functie toe op de elementen van de gegeven arrays
  • array_merge_recursive — Voeg twee arrays recursief samen
  • array_merge — Voeg twee of meer arrays samen
  • array_multisort — Sorteer meerdere of multi-dimensionale arrays
  • array_pad — Vul een array aan tot de gegeven lengte met een waarde
  • array_pop — Haal een element van het einde van een array af
  • array_product — Bereken het resultaat na vermenigvuldiging van de waarden in een array
  • array_push — Voeg een of meer elementen toe aan het einde van een array
  • array_rand — Kies een of meer willekeurige waarden uit een array
  • array_reduce — Reduceer de array iteratief tot een enkele waarde via een callback functie
  • array_reverse — Geef een array terug met elementen in omgekeerde volgorde
  • array_search — Zoekt in de array naar een gegeven waarde en geeft de corresponderende key terug bij succes
  • array_shift — Schuif een element van het begin van de array af
  • array_slice — Haal een plak uit de array
  • array_splice — Verwijder een gedeelte van de array en vervang dat door iets anders
  • array_sum — Bereken de som van de waarden in een array
  • array_udiff_assoc — Berekent het verschil tussen arrays met een aanvullende index controle, vergelijkt data met een gebruikersfunctie
  • array_udiff_uassoc — Berekent het verschil tussen arrays met een aanvullende index controle, vergelijkt data en indices met een gebruikersfunctie
  • array_udiff — Berekent het verschil tussen arrays gebruikmakend van een gebruikersfunctie voor data vergelijking
  • array_uintersect_assoc — Berekent de overeenkomst tussen arrays met een aanvullende index controle, vergelijkt data met een gebruikersfunctie
  • array_uintersect_uassoc — Berekent de overeenkomst tussen arrays met een aanvullende index controle, vergelijkt data en indices met gebruikersfuncties
  • array_uintersect — Berekent de overeenkomst tussen arrays, vergelijkt data met een gebruikersfunctie
  • array_unique — Verwijdert dubbele waarden uit een array
  • array_unshift — Voeg een of meer elementen toe aan het begin van een array
  • array_values — Geeft alle waarden van een array terug
  • array_walk_recursive — Pas een gebruikersfunctie recursief toe op ieder element van een array
  • array_walk — Pas een gebruikersfunctie toe op elk element van een array
  • array — Maak een array
  • arsort — Sorteer een array in omgekeerde volgorde en bewaar index associatie
  • asort — Sorteer een array en bewaar de index associatie
  • compact — Maak een array met daarin variabelen en hun waarden
  • count — Telt de elementen in een array
  • current — Geeft het huidige element in een array terug
  • each — Geef het huidige key-waarde paar terug uit een array en verplaats de array cursor een stap naar voren
  • end — Zet de interne pointer van een array op zijn laatste element
  • extract — Importeer variabelen naar de current symbol table vanuit een array
  • in_array — Controleer of een waarde voorkomt in een array
  • key — Geeft een key terug van een associatieve array
  • krsort — Sorteer een array via de keys in omgekeerde volgorde
  • ksort — Sorteer een array via de keys
  • list — Wijs variabelen toe alsof zij een array zijn
  • natcasesort — Sorteer een array gebruikmakend van een hoofdletterongevoelig "natural order" algoritme
  • natsort — Sorteer een array gebruikmakend van een "natural order" algoritme
  • next — Verplaats de interne array pointer van een array voorwaarts
  • pos — Alias van current
  • prev — Verplaats de interne array pointer naar achteren
  • range — Maak een array met een reeks van elementen
  • reset — Verplaats de interne pointer van een array naar het eerste element
  • rsort — Sorteer een array in omgekeerde volgorde
  • shuffle — Rangschik de elementen van een array in een willekeurige volgorde
  • sizeof — Alias van count
  • sort — Sorteer een array
  • uasort — Sorteer een array met een gebruikersfunctie en behoud de index associatie.
  • uksort — Sorteer een array via de keys met een gebruikersfunctie
  • usort — Sorteer een array via de waarden met een gebruikersfunctie


array_change_key_case> <rename_function
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
Arrays
renatonascto at gmail dot com
17-Sep-2008 11:11
Big arrays use a lot of memory possibly resulting in memory limit errors. You can reduce memory usage on your script by destroying them as soon as you´re done with them. I was able to get over a few megabytes of memory by simply destroying some variables I didn´t use anymore.
You can view the memory usage/gain by using the funcion memory_get_usage(). Hope this helps!
pragash_jey at yahoo dot com
06-Apr-2008 07:38
Java Like Array Implementation!

<?php
/*
 * Author : Pragash Jeyaratnam
 * Vector Class
 * PHP Version 5.2.5
 * Contact : pragash_jey@yahoo.com.
 */
class Vector
{
   
/*
     * The number of valid components in this Vector object.
     */
   
protected $elementCount;
   
/*
     * The array buffer into which the components of the vector are stored.
     */
   
protected $elementData;
   
   
         
   
/**Default vector Constructor*/
   
function __construct()
    {
       
$this->elementData = array();
       
$this->elementCount = count($this->elementData);
    }
   
   
   
   
/**Append the parameter element to the vector*/
   
public function add($object)
    {
        if(!empty(
$object))
        {
           
$this->elementData[] = $object;
           
$this->elementCount = count($this->elementData);
            return
true;
        }
        else
            return
false;
           
    }
   
   
/*
     * Returns true of Vector is empty false otherwise
     */
   
public function isEmpty()
    {
        return(
$this->elementCount==0);
    }
   
   
 
/*
   * Returns the current size of this Vector
   */
  
public function size()
   {
       return
$this->elementCount;
   }
   
  
/*
    *  Searches for the first occurence of the given argument
    **/
  
public function indexOf($object)
   {
          if((
$index =array_search($object,$this->elementData)) !==false)
              return
$index;
          else
              return -
1;
   }
  
  
/*
    * This function will retain TRUE if $object is contained
    * within the vector else FALSE
    */
  
  
public function contains($object)
   {
           return (
$this->indexOf($object)>=0);
   }
   
  
/*
    * Returns Vector Object at index $index
    * Error : Null is returned
    */
     
  
public function get($index)
   {
           if(
$this->checkBound($index))
           {
               return (
$this->elementData[$index]);
           }
           return
NULL;
   }
  
  
/*
    * Sets the object at $index to be $object
    **/
  
  
public function set($index,$object)
   {
           if(
$this->checkBound($index))
           {
              
$this->elementData[$index] =$object ;
               return
true;
           }
           return
false;
   }
  
 
/*
   * Removes element at $index
   **/
  
     
public function removeAt($index)
      {
       if (
$this->checkBound($index))
           {
                 for (
$i = $index; $i != $this->elementCount - 1; $i++)
                  {
                  
$this->elementData[$i] = $this->elementData[$i +1];
             }
      
array_pop($this->elementData);
      
$this->elementCount = count($this->elementData);
           
       return
true;
       }
       else {
            return
false;
            }
      }
   
   
/**
     * Removes all elements from the Vector.  Note that this does not
     * resize the internal data array.
     */
  
public function removeAll()
   {
         if(
$this->elementCount ==0)
             return;
         for(
$i=0;$i<$this->size();$i++)
         {
            
$this->set($i,NULL);
         }
   }
   
   
  
/*
    * This function checks whether index
    * is within the array bound
    **/
  
  
private function checkBound($index)
   {
         if(
$index > $this->elementCount-1 || $index < 0)
         {
             throw new
Exception('Array Index Out Of Bound Exception');
             return
false;
         }
         return
true;
   }
  
   
/*
     *Removes the first element from the Vector
     */
   
   
public function removeFirstElement()
    {
        if(
$this->elementCount==0)
        {
            throw new
Exception('No Such Element');
        }
       
$test =array_shift($this->elementData);
        if(!empty(
$test))
           
$this->elementCount = count($this->elementData);
    }
  
}
?>
Anonymous
29-Mar-2008 12:28
This is the shorter way to flatten a array:
<?php
 
function array_flatten($a) {
    foreach(
$a as $k=>$v) $a[$k]=(array)$v;
    return
call_user_func_array(array_merge,$a);
  }
?>
bas at muer dot nl
17-Mar-2008 09:17
I see a lot of people here writing complex functions to convert an array to a string, for use with Javascript or other things (possibly even databases, which would be bad).
For Javascript, the most efficient way would be JSON (http://www.php.net/json_encode). For normal use, serialize() (http://www.php.net/serialize) is your friend.
jake at blah dot inf
06-Mar-2008 06:03
@margol:

<?php
$tuple_array
= array(array('key1' => 'val1'), array('key2' => 'val2'));
list(
$key, $val) = each(array_pop($tuple_array));
?>

But, why not use a two element array instead of a single-element associative array?

<?php
$tuple_array
= array(array('key1', 'val1'), array('key2','val2'));
list(
$key,$val) = array_pop($tuple_array);
?>
margol at beamartyr dot net
04-Mar-2008 01:45
More intuitive tuple support would be nice  :)

But for those scratching their heads, like I did, to extract a tuple from an array of tuples, do something like:

    $tuple = array_pop($tuple_array);
    $key = key($tuple);
    $val = $tuple[$key];
yousefomar (a) yahoo dot com
28-Feb-2008 11:26
Here is how you refresh the expiration time for multiple cookies:

// get the cookie names
$keys=array_keys($_COOKIE);

// loop through all the cookies and update the exp. time
for ($i=0; $i<count($_COOKIE);$i++)
   setcookie( $keys[$i], $_COOKIE[$keys[$i]], time()+3600);

you can use this in authentication validate file to keep the session up.
ms419 at freezone dot co dot uk
14-Feb-2008 10:35
This function takes an array, a key and a value. If the key is not an array, it acts just like $array[$key] =& $value; If the key is an array, it recurses in the array, creating nested arrays as necessary.

Example:

$array = array('A' => array('B' => 'phi'));
$key = array('A', 'Z');
$value = 'gamma';

arraySet($array, $key, $value);

$array should now be:

array('A' => array('B' => 'phi', 'C' => 'gamma'));

This is useful for constructing nested arrays from sets of filesystem paths (e.g. 'A/B/C') or structured variable names (e.g. 'A.B.C' or 'A[B][C]')

Example:

arraySet($array, preg_split('/\//', $path, -1, PREG_SPLIT_NO_EMPTY), $value);

function arraySet(array &$array, $key, &$value)
{
    if (is_array($key)) {
        $keyComponent = array_shift($key);

        if (empty($key)) {
            $array[$keyComponent] =& $value;
            return;
        }

        if (!is_array($array[$keyComponent])) {
            $array[$keyComponent] = array();
        }

        PHP_CodeSniffer_arraySet($array[$keyComponent], $key, $value);
        return;
    }

    $array[$key] =& $value;
}
dennis at DONTSPAMME dot born05 dot nl
13-Feb-2008 07:22
I haven't completely figured out when or why an array gets referenced or copied, but it gave me quite the headache..

So i wrote a function which recursively copies an array while preserving keys and also clones objects if encountered

<?php
   
/**
     * make a recursive copy of an array
     *
     * @param array $aSource
     * @return array    copy of source array
     */
   
function array_copy ($aSource) {
       
// check if input is really an array
       
if (!is_array($aSource)) {
            throw new
Exception("Input is not an Array");
        }
       
       
// initialize return array
       
$aRetAr = array();
       
       
// get array keys
       
$aKeys = array_keys($aSource);
       
// get array values
       
$aVals = array_values($aSource);
       
       
// loop through array and assign keys+values to new return array
       
for ($x=0;$x<count($aKeys);$x++) {
           
// clone if object
           
if (is_object($aVals[$x])) {
               
$aRetAr[$aKeys[$x]]=clone $aVals[$x];
           
// recursively add array
           
} elseif (is_array($aVals[$x])) {
               
$aRetAr[$aKeys[$x]]=array_copy ($aVals[$x]);
           
// assign just a plain scalar value
           
} else {
               
$aRetAr[$aKeys[$x]]=$aVals[$x];
            }
        }
       
        return
$aRetAr;
    }
?>

I hope i can save someone else's aspirine with this ;)
csorfab at gmail dot com
05-Feb-2008 10:26
Here's a function I wrote to combine the values in an array in all different ways, and which returns a two-dimensional array as a byref result.

E.g.

if called:
comb(array(1, 2, 3), $r);

then $r would be:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

<?php

   
function comb($arr, &$rarr, $vtemp = array()){   
        foreach(
$arr as $key => $value){
           
$vtemp2 = $vtemp;
           
$vtemp2[] = $value;

           
$atemp = $arr;           
            unset(
$atemp[$key]);
           
            if(
count($atemp) > 0){
               
comb($atemp, $rarr, $vtemp2);
            } else {
               
$t = array();
           
                foreach(
$vtemp2 as $val){
                   
$t[] = $val;
                }
               
               
$rarr[] = $t;
            }
        }
    }

?>
christian dot reinecke at web dot de
02-Feb-2008 01:12
Here are two more functions handling string2array and access array by string. It's useful if you want to access an array in xpath-style, such as parse_ini_file return values with $process_sections = TRUE.

<?php
function createArrayByString($string, $separator, $value = NULL)
{
    if (
strlen($string) > 0) {
       
$splitter = explode($separator, $string);
       
$index = array_shift($splitter); // get first element
       
$function = __FUNCTION__;
        return array(
$index => $function(implode($separator, $splitter), $separator, $value));
    }
    return
$value;
}

function
accessArrayByString($array, $string, $separator, $default = NULL)
{
    if (!
is_array($array)) {
        return empty(
$string) ? $array : $default;
    }
    @list (
$key, $rest) = explode($separator, $string, 2); // @ needed for last access
   
   
$function = __FUNCTION__;
    return
array_key_exists($key, $array)
         ?
$function($array[$key], $rest, $separator, $default)
         :
$default;
}

$string = "one.two.three.four";
$separator = ".";

$array = createArrayByString($string, $separator, "standard value");
$return = accessArrayByString($array, $string, $separator, "element not found");

var_dump($array); // should return array("one" => array("two" => array("three" => array("four" => "standard value"))))
var_dump($return); // should return "standard value";
?>

change the function name to what ever you want, the recursive call uses __FUNCTION__ for re-call.
florian at egliselasauzaie dot fr
30-Jan-2008 02:09
I've created a class which is comparable to a Vector in C++;
<?php
class Vector {
    public
$nb_elements;
    public
$liste;

    public function
Vector() {
       
$this->liste = array ();
       
$this->nb_elements = count($this->liste);
    }

    public function
push_back($valeur) {
        if (!empty (
$valeur)) {
           
$this->liste[] = $valeur;
           
$this->nb_elements = count($this->liste);
            return
true;
        } else {
            return
false;
        }
    }
    public function
insert_at($indice, $valeur) {
        if (
$indice > 0 && $indice < $this->nb_elements) {
            for (
$i = $this->nb_elements; $i != $indice; $i--) {
               
$this->liste[$i] = $this->liste[$i -1];
            }
           
$this->liste[$indice] = $valeur;
           
$this->nb_elements = count($this->liste);
            return
true;
        } else {
            return
false;
        }
    }
    public function
remove_at($indice) {
        if (
$indice > 0 && $indice < $this->nb_elements) {
            for (
$i = $indice; $i != $this->nb_elements - 1; $i++) {
               
$this->liste[$i] = $this->liste[$i +1];
            }
           
array_pop($this->liste);
           
$this->nb_elements = count($this->liste);
            return
true;
        } else {
            return
false;
        }
    }
    public function
pop() {
       
$value = array_pop($this->liste);
       
$this->nb_elements = count($this->liste);
        return
$value;
    }
    public function
shift() {
       
$value = array_shift($this->liste);
       
$this->nb_elements = count($this->liste);
        return
true;
    }
}
?>
really quick function
25-Jan-2008 12:37
function array_flatten($a){ //flattens multi-dim arrays (distroys keys)
    $ab = array(); if(!is_array($a)) return $ab;
    foreach($a as $value){
        if(is_array($value)){
            $ab = array_merge($ab,array_flatten($value));
        }else{
            array_push($ab,$value);
        }
    }
    return $ab;
}
Jck_true (leave out the &#39;_&#39; at gmail dot com)
25-Jan-2008 02:00
A usefull function that returns a flat array.
I use it in a template system. Let the user pass a multidimensional array. Convert it using my function. Then use
<?php
$array
= flatten($array,'','{$','}','->');
echo
str_replace(array_keys($array),array_values($array),$template)
/**
* Flattens out an multidimension array
* Using the last parameters you can define the new key based on the old path.
* @param array $array A multidimension array
* @param string $prefix Internal perfix parameter - leave empty.
* @param string $start_string What string should start the final array key?
* @param string $end_string What string should end the final array key?
* @param string $seperator The string that should seperate the piecies in final array key path
* @return array Returns the flat array
*/
function flatten($array, $start_string= '{$',$end_string= '}',$seperator='->',$prefix="") {
 
$return = array();
  foreach(
$array as $key=>$value) {
    if (
is_array($value)) {
     
$return = array_merge($return, Parser_method_replace::flatten($value, $prefix.$key.$seperator,$start_string,$end_string,$seperator));
    } else
     
$return [$start_string.$prefix.$key.$end_string] = $value;
  }
  return
$return;
}
}
?>
Example:
$template = 'My string with replacement {$test->subkey}';
{$test->subkey} will get replaced with $array['test']['subkey']
chaos dot global dot net at gmail dot com
02-Jan-2008 03:53
if some one will need to convert array to php code use this function:

DEFINE('OFFSET_DELIMETER', "\t");

function array2php($array, $offset = OFFSET_DELIMETER)  {
    $text = '';
    foreach($array as $k => $v) {
        if (is_array($v)) {
            $text .= "{$offset}'{$k}' => array(\n".array2php($v, $offset.OFFSET_DELIMETER)."$offset)";
        } else {
            $text .= "{$offset}'{$k}' => ".(is_string($v)? "'$v'": $v);
        }
        $text .= ",\n";
    }
    if ($len = strlen($text)) $text[$len - 2] = " ";
    return $text;
}
Hayley Watson
17-Oct-2007 04:10
Regarding cyberchrist at futura dot net's function. It makes an unnecessary array_merge(); the elements of $b that are merged with those of $a are immediately removed again by the array_diff(). The "limiting to known values" is entirely unnecessary, in other words: arrays already only contain "known values".

Also, the description and function only address the issue of whether $a is a subset of $b, not whether it is a proper subset. For $a to be a proper subset of $b, it must also be the case that $b is not a subset of $a.

Taking those points into account (and a personal aesthetic dislike of "if(test) return true; else return false;" gives:

<?php
function is_subset($a, $b)
{
    return
count(array_diff($a,$b))==0;
}

function
is_proper_subset($a, $b)
{
    return
is_subset($a, $b) && !is_subset($b, $a);
}
?>
cyberchrist at futura dot net
15-Oct-2007 06:33
Lately, dealing with databases, I've been finding myself needing to know if one array, $a, is a proper subset of $b.

Mathematically, this is asking (in set theory) [excuse the use of u and n instead of proper Unicode):
 
( A u B ) n ( ~ B )

What this does is it first limits to known values, then looks for anything outside of B but in the union of A and B (which would be those things in A which are not also in B).

If any value exists in this set, then A is NOT a proper subset of B, because a value exists in A but not in B.  For A to be a proper subset, all values in A must be in B.

I'm sure this could easily be done any number of ways but this seems to work for me.  It's not got a lot of error detection such as sterilizing inputs or checking input types.

// bool array_subset( array, array )
// Returns true if $a is a proper subset of $b, returns false otherwise.

function array_subset( $a, $b )
{
    if( count( array_diff( array_merge($a,$b), $b)) == 0 )
        return true;
    else
        return false;
}
Kazuyoshi Tlacaelel
29-Aug-2007 11:56
<?php
/**
 * converts a multidimensional array to a flat array
 *
 * trying to keep the original names of the keys
 * if repeated keys are found a hash will be added to the
 * keys trying to keep as much as possible of the original
 * key context
 *
 * september 30 2007
 *
 * PHP version 5
 *
 * @license         GPL
 *
 */

$array = array ( 0 => array ( 0 => 1, 1 => 2, 2 => array ( 0 => 3, 1 => 4, 2 =>
array (
0 => 5, 1 => 6, 2 => array ( 0 => 7, 1 => 8,),),), 3 => array (
   
0 => array ( 0 => 9, 1 => 10, 2 => array ( 0 => 11, 1 => 12,
   
2 => array ( 0 => 13, 1 => 14, 2 => array ( 0 => 15, 1 => 16,),),),),
   
1 => array ( 0 => 17, 1 => 18,),),), 1 => array ( 0 => 19, 1 => 20,),
   
2 => array ( 0 => array ( 0 => 21, 1 => 22, 2 => array ( 0 => 23, 1 => 24,
   
2 => array ( 0 => 25, 1 => 26, 2 => array ( 0 => 27, 1 => 28,),),),),
   
1 => array ( 0 => 29, 1 => 30,),),);

/**
 * transforms a multidimensional array to a flat array
 *
 * the parameter is referenced
 * so no returning value is needed
 * @param array $array the multidimensional array to flat
 * @return void
 */
function array_flatten(&$array)
{
    function
has_arrays($array)
    {
        foreach (
$array as $item) {
            if (
is_array($item)) {
                return
true;
            }
        }
        return
false;
    }

    function
copy_array(&$array, $array_key)
    {
       
$array2 = $array[$array_key];
        unset(
$array[$array_key]);
        foreach (
$array2 as $subkey => $subvalue) {
            if (
array_key_exists($subkey, $array)) {
               
$array[generate_unique_key($subkey)] = $subvalue;
            } else {
               
$array[$subkey] = $subvalue;
            }
        }
    }

    function
generate_unique_key($key)
    {
        if (
strlen($key)>8) {
           
$key = $key[0] . $key[1] . $key[2];
        }
       
$id = $key . '_';
       
$uid = uniqid();
       
$len = strlen($uid);
       
$max = (9 - strlen($key));
        for (
$c = $len; ; $c --) {
           
$id .= $uid[$c];
            if (
$c == ($len - $max)) {
                break;
            }
        }
        return
$id;
    }

    function
get_array_indexes($array)
    {
       
$ret_array = array();
        foreach (
$array as $key => $value) {
            if (
is_array($value)) {
               
$ret_array[] = $key;
            }
        }
        return
$ret_array;
    }

    while(
has_arrays($array)) {
        foreach (
get_array_indexes($array) as $key) {
           
copy_array($array, $key);
        }
    }
}

   
array_flatten($array);
   
array_multisort($array);
   
var_export($array);

   
/**
     *  OUTPUT
     *
     *  array (
     *    0 => 1,
     *    '1_403767b6' => 2,
     *    '0_793767b6' => 3,
     *    '1_8a3767b6' => 4,
     *    '0_454767b6' => 5,
     *    '1_564767b6' => 6,
     *    '0_035767b6' => 7,
     *    '1_345767b6' => 8,
     *    '0_e74767b6' => 9,
     *    '1_f84767b6' => 10,
     *    '0_855767b6' => 11,
     *    '1_a65767b6' => 12,
     *    '0_4e5767b6' => 13,
     *    '1_6f5767b6' => 14,
     *    '0_566767b6' => 15,
     *    '1_876767b6' => 16,
     *    '0_5b4767b6' => 17,
     *    '1_6c4767b6' => 18,
     *    '0_d43767b6' => 19,
     *    1 => 20,
     *    '0_4e3767b6' => 21,
     *    '1_5f3767b6' => 22,
     *    '0_ad4767b6' => 23,
     *    '1_ce4767b6' => 24,
     *    '0_485767b6' => 25,
     *    '1_695767b6' => 26,
     *    '0_116767b6' => 27,
     *    '1_426767b6' => 28,
     *    '0_814767b6' => 29,
     *    '1_924767b6' => 30,
     *  )
     */
?>
mo dot longman at gmail dot com
30-Jul-2007 11:27
to 2g4wx3:
i think better way for this is using JSON, if you have such module in your PHP. See json.org.

to convert JS array to JSON string: arr.toJSONString();
to convert JSON string to PHP array: json_decode($jsonString);

You can also stringify objects, numbers, etc.
g4wx3
19-Jul-2007 02:16
I needed a function to convert a php array into a javascript array.
No problem i found it on "the net".

But the function i found wasn't good enough, instead of return a string with javascript-array it echoed directly everything.
I wanted to write the string to a file, when calling the function out of my function libary.

Secondly, there where minor "bugs" in the script, when you're original array contained characters like line breaks(\r\n,..), or quotes('), it would hack up the javascript array

Sow, i changed the function and fixed the bug.

<?php
//SUPER COOL : http://www.communitymx.com/content/article.cfm?page=3&cid=7CD16
//Checkout:  REVERSE: http://www.hscripts.com/tutorials/php/jsArrayToPHP.php
//Convert a PHP array to a JavaScript one (rev. 4)
//Changlog by g4wx3: echo replaced by $output, added function output
function output($string) //make javascript ready
   
{
   
$string = str_replace( array( '\\' , '\'' ), array('\\\\', '\\\'') , $string); //-> for javascript array
   
$string = str_replace(  array("\r\n", "\r", "\n") , '<br>' , $string);    //nl2br
   
return $string;
    }
function
arrayToJS4($array, $baseName ) {
   
//Write out the initial array definition
//v4    echo ($baseName . " = new Array(); \r\n ");
   
$output = $baseName . " = new Array(); \r\n ";

   
//Reset the array loop pointer
   
reset ($array);

   
//Use list() and each() to loop over each key/value
    //pair of the array
   
while (list($key, $value) = each($array)) {
        if (
is_numeric($key)) {
       
//A numeric key, so output as usual
       
$outKey = "[" . $key . "]";
        } else {
       
//A string key, so output as a string
       
$outKey = "['" . $key . "']";
        }
     
        if (
is_array($value)) {
       
//The value is another array, so simply call
        //another instance of this function to handle it
       
$output .= arrayToJS4($value, $baseName . $outKey);
        } else {

           
//Output the key declaration
//v4            echo ($baseName . $outKey . " = ");     
           
$output .= $baseName . $outKey . " = ";
           
           
//Now output the value
           
if (is_string($value)) {
               
//Output as a string, as we did before      
//v4                echo ("'" . output($value) . "'; \r\n ");
               
$output .= "'" . output($value) . "'; \r\n ";
            } else if (
$value === false) {
               
//Explicitly output false
//v4                echo ("false; \r\n");
               
$output .= "false; \r\n";
            } else if (
$value === NULL) {
               
//Explicitly output null
//v4                echo ("null; \r\n");
               
$output .= "null; \r\n";
            } else if (
$value === true) {
               
//Explicitly output true
//v4                echo ("true; \r\n");
               
$output .= "true; \r\n";
            } else {
           
//Output the value directly otherwise
//v4            echo ($value . "; \r\n");
           
$output .= $value . "; \r\n";
            }
        }
    }
return
$output;
}
?>
You can use this for printing $_GET array, for example
peanutpad at msn dot com
15-Jun-2007 03:15
heres a function from http://www.linksback.org  Feedback welcome, of course!  Public domain, yadda yadda.

function mySort(&$array,$key) {
    if (!is_array($array) || count($array) == 0) return true;
    $assocSortCompare  = '$a = $a["'.$key.'"]; $b = $b["'.$key.'"];';

    if (is_numeric($array[0][$key])) {
      $assocSortCompare.= ' return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);';
    } else {
      $assocSortCompare.= ' return strcmp($a,$b);';
    }

    $assocSortCompare = create_function('$a,$b',$assocSortCompare);
    return usort($array,$assocSortCompare);
}
webdev at svbeatrix dot com
11-Jun-2007 09:06
Bugs happen, but how can people post functions that WON'T EVEN COMPILE!  I truly detest finding a cool code snippet or function and then having to debug them. Sorry for the rant, but I have experienced this scenario a number of times.  TEST YOUR CODE, THEN POST!

Here is a revised and corrected previously posted function ArrayDepth, which had 3 bugs and yes, would not compile.

function ArrayDepth($Array,$DepthCount=-1) {
// Find maximum depth of an array
// Usage: int ArrayDepth( array $array )
// returns integer with max depth
// if Array is a string or an empty array it will return 0
  $DepthArray=array(0);
  $DepthCount++;
  $Depth = 0;
  if (is_array($Array))
    foreach ($Array as $Key => $Value) {
      $DepthArray[]=ArrayDepth($Value,$DepthCount);
    }
  else
    return $DepthCount;
  return max($DepthCount,max($DepthArray));
}
sid dot pasquale at gmail dot com
29-May-2007 02:57
<?php
/* This function allow you to transform a multidimensional array
   in a simple monodimensional array.
   Usage: array_walk($oldarray, 'flatten_array', &$newarray);
   For example, this code below shows to you:
        Array
        (
            [1] => Array
                (
                    [0] => 1
                    [1] => 2
                )
       
            [2] => Array
                (
                    [0] => 3
                    [1] => 4
                )
       
        )
       
        Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )
*/

function flatten_array($value, $key, &$array) {
    if (!
is_array($value))
       
array_push($array,$value);
    else
       
array_walk($value, 'flatten_array', &$array);
 
}
 
$oldarray = array(
   
1 => array(1,2),
   
2 => array(3,4)
);
$newarray = array();
array_walk($oldarray, 'flatten_array', &$newarray);
echo
"<pre>";
print_r($oldarray);
print_r($newarray);
echo
"</pre>";
?>
info at dyflexis dot nl
17-Apr-2007 01:13
A modernized version of the flatten_array() functies written by

davidj at boundlessgallery dot DISLIKESPAM dot com
on 02-Apr-2004 03:10

This function is able to work with associative arrays

<?php
function flatten_array($array) {
    
$size=sizeof($array);
    
$keys=array_keys($array);
    for(
$x = 0; $x < $size; $x++) {
        
$element = $array[$keys[$x]];

        if(
is_array($element)) {
           
$results = flatten_array($element);
               
$sr = sizeof($results);
               
$sk=array_keys($results);
            for(
$y = 0;