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 ...] )

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
) ?>

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