Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Array Functions : compact

compact

Create array containing variables and their values (PHP 4, PHP 5)
array compact ( mixed varname [, mixed ...] )

compact() takes a variable number of parameters. Each parameter can be either a string containing the name of the variable, or an array of variable names. The array can contain other arrays of variable names inside it; compact() handles it recursively.

For each of these, compact() looks for a variable with that name in the current symbol table and adds it to the output array such that the variable name becomes the key and the contents of the variable become the value for that key. In short, it does the opposite of extract(). It returns the output array with all the variables added to it.

Any strings that are not set will simply be skipped.

Gotcha:

Because variable variables may not be used with PHP's Superglobal arrays within functions, the Superglobal arrays may not be passed into compact().

Example 298. compact() example

<?php
$city  
= "San Francisco";
$state = "CA";
$event = "SIGGRAPH";

$location_vars = array("city", "state");

$result = compact("event", "nothing_here", $location_vars);
print_r($result);
?>

The above example will output:

Array
(
   [
event] => SIGGRAPH
   
[city] => San Francisco
   
[state] => CA
) ?>


See also extract().

Code Examples / Notes » compact

mijllirg

You might could think of it as ${$var}.  So, if you variable is not accessible with the ${$var} it will not working with this function.  Examples being inside of function or class where you variable is not present.
<?php
$foo = 'bar';
function blah()
{
   // this will no work since the $foo is not in scope
   $somthin = compact('foo'); // you get empty array
}
?>
PS: Sorry for my poor english...


pillepop2003

Use the following piece of code if you want to insert a value into an array at a path that is extracted from a string.
Example:
You have a syntax like 'a|b|c|d' which represents the array structure, and you want to insert a value X into the array at the position $array['a']['b']['c']['d'] = X.
<?
function array_path_insert(&$array, $path, $value)
{
$path_el = split('\|', $path);

$arr_ref =& $array;

for($i = 0; $i < sizeof($path_el); $i++)
{
$arr_ref =& $arr_ref[$path_el[$i]];
}

$arr_ref = $value;
}
$array['a']['b']['f'] = 4;
$path  = 'a|b|d|e';
$value = 'hallo';

array_path_insert($array, $path, $value);
/* var_dump($array) returns:
array(1) {
 ["a"]=>
 &array(1) {
   ["b"]=>
   &array(2) {
     ["f"]=>
     int(4)
     ["d"]=>
     &array(1) {
       ["e"]=>
       string(5) "hallo"
     }
   }
 }
*/
?>
Rock on
Philipp


hericklr

The compact function doesn't work inside the classes or functions.
I think its escope is local...
Above it is a code to help about it.
Comments & Suggestions are welcome.
PS: Sorry for my poor english...
<?php
function x_compact()
{ if(func_num_args()==0)
{ return false; }
$m=array();
function attach($val)
{ global $m;
if((!is_numeric($val)) && array_key_exists($val,$GLOBALS))
{ $m[$val]=$GLOBALS[$val];}
}
function sub($par)
{ global $m;
if(is_array($par))
{ foreach($par as $cel)
{ if(is_array($cel))
{ sub($cel); }
else
{ attach($cel); }
}
}
else
{ attach($par); }
return $m;
}
for($i=0;$i<func_num_args();$i++)
{ $arg=func_get_arg($i);
sub($arg);
}
return sub($arg);
}
?>


rlynch

It should be noted that PHP will simply skip any strings that are not set:
<?php
 $foo = 4;
 $bar = 3;
 $result = compact('foo', 'bar', 'baz');
?>
will result in:
('foo' => 4, 'bar' => 3)
'baz' is simply ignored.


m spreij

Can also handy for debugging, to quickly show a bunch of variables and their values:
<?php
print_r(compact(explode(' ', 'count acw cols coldepth')));
?>
gives
Array
(
   [count] => 70
   [acw] => 9
   [cols] => 7
   [coldepth] => 10
)


Change Language


Follow Navioo On Twitter
array_change_key_case
array_chunk
array_combine
array_count_values
array_diff_assoc
array_diff_key
array_diff_uassoc
array_diff_ukey
array_diff
array_fill_keys
array_fill
array_filter
array_flip
array_intersect_assoc
array_intersect_key
array_intersect_uassoc
array_intersect_ukey
array_intersect
array_key_exists
array_keys
array_map
array_merge_recursive
array_merge
array_multisort
array_pad
array_pop
array_product
array_push
array_rand
array_reduce
array_reverse
array_search
array_shift
array_slice
array_splice
array_sum
array_udiff_assoc
array_udiff_uassoc
array_udiff
array_uintersect_assoc
array_uintersect_uassoc
array_uintersect
array_unique
array_unshift
array_values
array_walk_recursive
array_walk
array
arsort
asort
compact
count
current
each
end
extract
in_array
key
krsort
ksort
list
natcasesort
natsort
next
pos
prev
range
reset
rsort
shuffle
sizeof
sort
uasort
uksort
usort
eXTReMe Tracker