Monday, 2 February 2015

Converting an array to individual variables

Converting an array to individual variables



Extract() is a very popular function that converts elements in an array into variables in their own right. Extract takes a minimum of one parameter, an array, and returns the number of elements extracted. This is best explained using code, so here goes:
<?php
    $Wales
 = 'Swansea';
    
$capitalcities['England'] = 'London';
    
$capitalcities['Scotland'] = 'Edinburgh';
    
$capitalcities['Wales'] = 'Cardiff';
    
extract($capitalcities);
    print
 $Wales;?>
After calling extract, the "England", "Scotland", and "Wales" keys become variables in their own right ($England, $Scotland, and $Wales), with their values set to "London", "Edinburgh", and "Cardiff" respectively. By default, extract() will overwrite any existing variables, meaning that $Wales's original value of "Swansea" will be overwritten with "Cardiff".

This behaviour can be altered using the second parameter, and averted using the third parameter. Parameter two takes a special constant value that allows you to decide how values will be treated if there is an existing variable, and parameter three allows you to prefix each extract variable with a special string. Here are the possible values of the second parameter:
EXTR_OVERWRITE
On collision, overwrite the existing variable
EXTR_SKIP
On collision, do not overwrite the existing variable
EXTR_PREFIX_SAME
On collision, prefix the variable name with the prefix specified by parameter three
EXTR_PREFIX_ALL
Prefix all variables with the prefix specified by parameter three, whether or not there is a collision
EXTR_PREFIX_INVALID
Only use the prefix specified by parameter three when variables names would otherwise be illegal (e.g. "$9")
EXTR_IF_EXISTS
Only set variables if they already exist
EXTR_PREFIX_IF_EXISTS
Only create prefixed variables if non-prefixed version already exists
EXTR_REFS
Extract variables as references
The last option, EXTR_REFS, can either be used on its own or in combination with others using the bitwise OR operator |.
Here are some examples based upon the $capitalcities array from the previous example:
<?php
    $Wales
 = 'Swansea';
    
extract($capitalcities, EXTR_SKIP);
    print
 $Wales;
    print
 $Scotland;
    
extract($capitalcities, EXTR_PREFIX_SAME, "country");
    print
 $Wales;
    print
 $country_England;
    
extract($capitalcities, EXTR_PREFIX_ALL, "country");?>
On line one we pre-set $Wales to be a value so that you can clearly see how the second parameter works. On line two we callextract() using two parameters, with EXTR_SKIP as parameter two so that our $Wales will not be overwritten. However, as you will be able to see if you run the script, $England and $Scotland were set.
On line five we use EXTR_PREFIX_SAME, which will extract variables and use the third parameter as a prefix if it finds any collisions. As we set $Wales ourselves and our previous call to extract() created $England and $Scotland, all our variables will need to be prefixed. As you can see on line six, $Wales is still set to "Swansea", and on line seven we have our prefixed variable $country_England. Note that PHP places an underscore _ after your prefix to make the variable easy to read.
Finally we call extract() with EXTR_PREFIX_ALL, which will unconditionally create variables with prefixes, overwriting$country_England, etc. Note that EXTR_OVERWRITE is rarely if ever used, because it is the same as using extract() without second or third parameters.

--
Regards,

Venkataramana Ippili
Mobile NO: +91 9959440612

0 comments:

Post a Comment